Che*_*Alf 14 c++ pass-by-reference c++-standard-library visual-c++ c++11
码:
#include <functional>
struct Foo
{
virtual void mf() = 0;
};
struct Bar: Foo
{
virtual void mf() {}
};
int main()
{
Bar o;
std::reference_wrapper<Foo const> wrapper( o );
}
Run Code Online (Sandbox Code Playgroud)
MinGW g ++ 4.6.1的结果:
[d:\dev\test] > g++ foo.cpp -std=c++0x [d:\dev\test] > _
Visual C++ 10.0的结果:
[d:\dev\test]
> cl foo.cpp
foo.cpp
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xrefwrap(371) : see reference to class template instantiation 'std::tr1::_Call_wrapper' being compiled
with
[
_Callable=std::tr1::_Callable_obj
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xrefwrap(416) : see reference to class template instantiation 'std::tr1::_Refwrap_impl' being compiled
with
[
_Ty=const Foo
]
foo.cpp(16) : see reference to class template instantiation 'std::tr1::reference_wrapper' being compiled
with
[
_Ty=const Foo
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2027: use of undefined type 'std::
tr1::_Result_of'
with
[
_Ty=const Foo (void)
]
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(9) : error C2143: syntax error : missing ';' before '('
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(9) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(10) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xxcallwrap(8) : error C2259: 'Foo' : cannot instantiate abstract class
due to following members:
'void Foo::mf(void)' : is abstract
foo.cpp(5) : see declaration of 'Foo::mf'
[d:\dev\test]
> _
我喜欢Visual C++编译器11次告诉用户抽象类无法实例化的方式,只是为了点回家,就像用户不知道那样.但是应该std::reference_wrapper真正实例化这个类吗?是没有太大的(通过传递)参考点的不要求实例?
也就是说,正如我强烈怀疑的那样,这是Visual C++标准库实现中的一个错误吗?
| 归档时间: |
|
| 查看次数: |
1479 次 |
| 最近记录: |