1

Visual Studio können diesen Code (Fehler C2976)VS2015 Fehler C2976

aber GCC und Clang können diesen Code

warum nicht kompilieren kompilieren ???

#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

Wird ein Fehler angezeigt? –

+1

Mögliches Duplikat von [Vorlagenabzug schlägt für std: map als Vorlagenparameter fehl] (http://stackoverflow.com/questions/26059219/template-deduction-fails-for-stdmap-as-template-parameter) – cromod

Antwort

1

Meine Vermutung ist, dass dies, weil Visual Studio 2015 nicht vollständig keine verschachtelten variadische Vorlagen unterstützen, und es kann die Art nicht richtig geschlossen werden.

Als eine Umgehung müssen Sie die Typen explizit angeben, so dass Sie Func<std::map<int, double>>(m);, Func<int, double>(m); oder sogar Func<decltype(m)>(m); verwenden können (ich empfehle die letzte).