1

VisualStudioのは、このコード(エラーC2976)VS2015エラーC2976

をコンパイルすることはできませんが、GCCとクランは、このコード

理由をコンパイルすることができます?

#include <iostream> 
#include <map> 

template <typename... ARGS> 
void Func(const std::map<ARGS...>& m) 
{ 
    //... 
} 

template <typename T> 
void Func(const T& t) 
{ 
    //... 
} 

int main() 
{ 
    std::map<int, double> m; 
    Func(m); // error C2976: 'std::map': too few template arguments 
    Func(123); // OK 
    return 0; 
} 
+1

エラーを示していますか? –

+1

テンプレートの控除がテンプレートパラメータとしてstd:mapに対して失敗する可能性があります(http://stackoverflow.com/questions/26059219/template-deduction-fails-for-stdmap-as-template-parameter) – cromod

答えて

1

私の推測では、Visual Studio 2015は、完全にネストされた可変引数テンプレートをサポートしていない、それが正しくタイプを推測することができないためであるということです。

タイプを明示的に指定する必要があるため、Func<std::map<int, double>>(m);,Func<int, double>(m);、またはFunc<decltype(m)>(m);(最後のものをお勧めします)を使用することがあります。

関連する問題