
[Ion GaztaƱaga]
Problem: MSVC 10.0 (Visual 2010) with real rvalue references seems to have bugs and does not compile the test.
I don't think that the compile error of MSVC 10.0 triggered by the statement container<conversion_target_movable> c; is entirely unique to version 10.0, it's only triggered more frequently (and especially I think it is completely unrelated to rvalue references). IIRC, the same compile error will be triggered by the following code class __declspec(dllexport) derived_class : public container<conversion_target_movable> { ... }; in earlier versions of MSVC. I think that this error is caused by MSVC instantiating every single non-template member function of the "container<conversion_target_movable>" class, whether it is actually used or not. I have to admit that I understand why MSVC does this in case of __declspec(dllexport). However, triggering the same behavior by the statement "container<conversion_target_movable> c;" probably really qualifies as bug.
I can't find a workaround, a future Service Pack might solve these errors, but maybe we should stick to emulation code in this compiler, unless someone could shed some light on this, of course.
As I think this is unrelated to rvalue references, I don't see how sticking to emulation code should help with this. A workaround for your example is to turn the non-template member function into a template member function to avoid that MSVC 10 instantiates the member function which is not applicable to non-copyable element types. template<class TT> void push_back(BOOST_MOVE_CATCH_CONST(TT) x) { return priv_push_back(static_cast<const TT&>(x)); } A more challenging workaround would be to selectively deactivate all non-applicable member functions by meta-programming. [Stephan T. Lavavej]
Can you provide a minimal test case, demonstrating just the bug in question?
Is the above description of the issue clear enough, or do you still need an explicit minimal test case? Regards, Thomas