模板函数的默认参数似乎必须在第一次声明的时候给出。
stackoverflow上的例子
#include <string>
#include <iostream>
class MyClass {
public:
std::wstring msg = L"hey";
MyClass(){};
};
class MyClass2{
public:
template<class T> MyClass2(T* t, int i);
};
template<class T>
MyClass2::MyClass2(T* t,int i=0){ std::wcout << t->msg << std::endl; }
int main(int argc, char **argv)
{
MyClass mc;
MyClass2 mc2(&mc);
return 0;
}
会报如下错误
error: redeclaration of 'MyClass2::MyClass2(T*, int)' may not have default arguments [-fpermissive]
相关条款
[C++14: 8.3.6/4]: For non-template functions, default arguments can be added in later
declarations of a function in the same scope. [..]
[C++14: 8.3.6/6]: Except for member functions of class templates, the default
arguments in a member function definition that appears outside of the class
definition are added to the set of default arguments provided by the member function
declaration in the class definition [..]