考虑以下代码:
#include <iostream>
#include <type_traits>
// Variadic version
template<class... Variadic>
void f(const Variadic&... variadic)
{
std::cout<<"variadic"<<std::endl;
}
// Single version
template<class Single, class = typename std::enable_if<std::is_fundamental<Single>::value>::type>
void f(const Single& single)
{
std::cout<<"single"<<std::endl;
}
// Main
int main()
{
f(); // variadic
f(42); // single : why?
f(std::string()); // variadic
f(42, 42); // variadic
return 0;
}
我不明白为什么标记为“single”的行编译得很好(在 g++ 4.6.3 下)并且不会产生重载解决问题。c++11 标准是否说具有固定数量参数的模板函数优于具有相同签名的可变参数函数?