C++11 Visual Studio和gcc在编译可变模板程序时的不同行为
我正在使用C++11的可变模板,下面是我的代码:C++11 Visual Studio和gcc在编译可变模板程序时的不同行为,c++11,variadic-templates,C++11,Variadic Templates,我正在使用C++11的可变模板,下面是我的代码: #include "iostream" void func(){ std::cout << std::endl; } template< typename ...Params> void func(int x, Params... params){ std::cout << " int " << x; func(params...);
#include "iostream"
void func(){
std::cout << std::endl;
}
template< typename ...Params> void func(int x, Params... params){
std::cout << " int " << x;
func(params...);
}
template< typename ...Params> void func(float x, Params... params){
std::cout << " float " << x;
func(params...);
}
template< typename ...Params> void func(const char* x, Params... params){
std::cout << " const char* " << x;
func(params...);
}
int main(int argc, char* argv[])
{
func(3.14f, 5, "Test");
getchar();
return 0;
}
#包括“iostream”
void func(){
std::cout void func(int x,Params…Params){
标准::coutgcc行为是正确的
大致上说,当你实例化一个模板时,实例化需要在找到原始模板定义的地方放置合法的C++代码(更确切地说,除了所谓的所有名字,在模板定义点上都需要解决)。
在您的例子中,第一个模板实例化为
void func(int x, const char *params0){
std::cout << " int " << x;
func(params0);
}
void func(int x,const char*params0){
请注意,此代码在MSVC 19.11.25506上编译时没有/permissive-
标志。
void func(int x, const char *params0){
std::cout << " int " << x;
func(params0);
}