以下代码无法在 Visual C++ 2008 和 2010 上编译:
#include <memory>
struct A {};
std::auto_ptr<A> foo() { return std::auto_ptr<A>(new A); }
const std::auto_ptr<A> bar() { return std::auto_ptr<A>(new A); }
int main()
{
const std::auto_ptr<A> & a = foo(); // most important const
const std::auto_ptr<A> & b = bar(); // error C2558:
// class 'std::auto_ptr<_Ty>' :
// no copy constructor available or copy
// constructor is declared 'explicit'
bar(); // No error?
}
我希望“最重要的 const”适用于变量“b”,但是,它没有编译,并且由于某种原因,编译器要求一个复制构造函数(这让我感到惊讶,因为这里不应该涉及复制) . 独立调用bar()
工作正常,这意味着,我想,这确实b
是问题的初始化。
这是编译器错误,还是标准中描述的真正编译错误?
(也许它在 C++98 中被禁止,在 C++11 中被授权?)
注意:它可以在 Visual C++ 2012、gcc 4.6 和 Solaris CC(所有编译器...)上编译,但不能在 gcc 3.4 和 XL C 上编译)