Как я понимаю, std::nullptr_t
может быть инициализирован из nullptr
, а также из 0
. Но в то же время третья инициализация ниже не работает, несмотря на то, что 5
имеет тот же тип, что и 0
:
#include <memory>
int main()
{
std::nullptr_t null1=0;
std::nullptr_t null2=nullptr;
std::nullptr_t null3=5; // error: cannot convert ‘int’ to ‘std::nullptr_t’ in initialization
}
Как это работает? То есть как стандартная библиотека выделяет 0
из 5
во время компиляции, если эти литералы не являются аргументами шаблона?
Можно создать пользовательский класс, который бы аналогичным образом отличал аргументы своего конструктора во время компиляции, а не используя std::nullptr_t
для этого?