为什么std :: make_unique中使用的静态常量需要定义?

时间:2019-04-05 19:10:23

标签: c++ language-lawyer unique-ptr

以下代码在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模式接受代码的情况。

0 个答案:

没有答案