
[Michel Morin]
IIRC, Stephan said that VC++ 11 supports N3276 decltype.
Yep. [Marshall Clow]
What we need to do is to figure out the differences between VC10 and VC11 and update the VC config for that.
http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx is the Rosetta Stone - it is accurate to the best of my ability. There is one caveat - rvalue references v2.1 was not completely implemented (it is still tracked by an active bug). This demonstrates what works and what doesn't: C:\Temp>type meow.cpp #include <stdio.h> #include <string> using namespace std; void foo(const string&) { puts("foo(const string&)"); } void foo(string&&) { puts("foo(string&&)"); } #ifdef BAR void bar(long&&) { puts("bar(long&&)"); } #endif int main() { foo("meow"); #ifdef BAR int x = 1729; bar(x); #endif } C:\Temp>cl /EHsc /nologo /W4 /MTd meow.cpp meow.cpp C:\Temp>meow foo(string&&) C:\Temp>cl /EHsc /nologo /W4 /MTd /DBAR meow.cpp meow.cpp meow.cpp(24) : error C2664: 'bar' : cannot convert parameter 1 from 'int' to 'long &&' You cannot bind an lvalue to an rvalue reference C++11 and VC11 agree that foo(string&&) should be selected (the string literal is an lvalue, but the temporary std::string is an rvalue). C++11 says that bar(long&&) should be invoked (int x is an lvalue, but the temporary long is an rvalue), but VC11 rejects this. That's the remaining bug. Hope this helps, STL