最近我在编写一段代码时,发现了GCC和Clang中的一些不寻常的问题。使用大括号初始化(brace-init)会在gcc中触发编译错误,而直接初始化,如&b = a
是可以工作的。下面的代码是我遇到的这种行为的一个非常简单的例子,我想知道为什么GCC不编译这段代码,因为shared_ptr都没有采用initializer_list,而a
是左值。
#include <iostream>
#include <memory>
int main( )
{
std::shared_ptr<int> a { nullptr }, &b { a };
a = std::make_shared<int> ( 1e3 );
std::cout << ( b ? *b : 0 ) << std::endl;
return 0;
}
Clang 3.4可以编译这个内容,但GCC 4.8不能。