[Emil Dotchevski]
P.S. Perhaps STL can confirm, I'm guessing that the MSVC bug was introduced by the added rvalue reference support, which interfered with the heuristics MSVC uses to attempt to successfully parse non-conformant code that doesn't use mandatory "typename". This can be seen for example in q.hpp, which used to contain functions like: template
typename enable_if_c< is_q<A>::value && is_q<B>::value, A &>::type operator-=( A & a, B const & b )
I believe this is unrelated to missing-typename nonconformance (remember, VC doesn't do two-phase name lookup, so template parsing is effectively deferred until instantiation, where the typeness of stuff is known) and rvalue references (you should be able to trigger the same issue with "||"). Instead, VC wasn't keeping around all of the information needed for template non-type parameters. A bug in this area was fixed for VS14, you can try CTP1 to check. Or if you send me a self-contained repro, I can compile it with our current development build. STL