以下代码在C ++ 14模式下生成一个“未定义的引用” error,在c ++ 17中使用最新的Clang生成no issue(与gcc相同,但在两种情况下均可使用VS2017):
#include <memory>
struct S
{
static constexpr int i = 42;
};
int main()
{
std::make_unique<int>(S::i); // undefined reference in C++14, no issue in C++17
}
与此问题相关的两个标准修订版之间有何更改? VS是否按照标准在C ++ 14中对此代码具有正确的行为?
为S::i
添加定义可解决所有编译器/标准的问题。
我的问题主要是make_unique
的行为,为什么需要定义?例如,我可以使用std::unique_ptr<int>(new int(S::i))
,而无需定义S::i
。
此外,建议的重复项无法回答为什么Visual Studio以C ++ 14模式接受代码的情况。