【发布时间】:2013-10-02 01:30:59
【问题描述】:
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 中明确提供了默认参数的类型,所以我认为没有任何类型歧义。
这里有什么问题?有没有合适的方法来使用模板函数做默认参数?
【问题讨论】:
标签: c++ templates type-inference default-parameters template-function