I'm attempting to specialize a function template but I'm getting the following error :
bar.cpp:12:39: error: template-id ‘getValue<>’ for ‘std::variant<int, double> Test::getValue(const string&)’ does not match any template declaration 12 | template <> std::variant<int, double> Test::getValue(const std:: string& name) { | ^~~~ bar.cpp:7:29: note: candidate is: ‘template<class T> T Test::getValue(const string&) const’ 7 | template <typename T> T getValue(const std::string& name) const; | ^~~~~~~~ Yet I can't find why this is the case, as far as I see I'm respecting the method signature.
#include <iostream> #include <unordered_map> #include <variant> class Test { Test(); template <typename T> T getValue(const std::string& name) const; std::unordered_map<std::string, std::variant<int, double>> dict_; }; template <> std::variant<int, double> Test::getValue(const std:: string& name) { // ... do things }
template <> std::variant<int, double> Test::getValue<std::variant<int, double>>(const std:: string& name)