C++Шаблона функциональных параметры по умолчанию и определение типа
Ни одна из этих функций шаблона
template<typename T> void foo(T par = nullptr) {return;} //#1
template<typename T> void foo(T par = std::nullptr_t(nullptr)) {return;} //#2
template<typename T> void foo(T par = int(0)) {return;} //#3
позволяет что-либо с помощью следующего вызова нулевого аргумента не компилировать:
foo();
хотя вызов foo
с любыми значениями работ (например, foo(2)
).
nullptr
имеет тип std::nullptr_t
, поэтому я не думал, что для параметра по умолчанию требуется дополнительная квалификация типа в # 1. Тип параметра по умолчанию явно указан в # 2 и # 3, поэтому я не думал, что там есть какая-то двусмысленность.
Что здесь не так? Есть ли способ сделать параметры по умолчанию с помощью функций шаблона?