Как показано здесь, std::unique_ptr
имеет два конструктора constexpr
для нулевых указателей:
constexpr unique_ptr();
constexpr unique_ptr( nullptr_t );
У меня есть два вопроса для этих двух конструкторов:
-
Зачем нам нужны два? Разве мы не можем объявить его как:
constexpr unique_ptr( nullptr_t = nullptr );
-
Действительно ли
constexpr
полезен? Я пробовал делать это в своем коде, но он не компилировался (g++ 6.1.0,-std=c++14
):constexpr std::unique_ptr<int> p; // error: the type 'const std::unique_ptr<int>' of constexpr variable 'p' // is not literal because 'std::unique_ptr<int>' has a non-trivial destructor