У меня есть «установленный» тип данных:
template <class V>
struct Set {
void add(const V& value) {}
};
Я хочу написать версию функции верхнего уровня Set::add
.
template <class V>
void add(const Set<V>& set, const V& value) {}
Это не совсем работает со строковыми литералами:
Set<const char*> set;
const char* val = "a";
set.add(val); // ok
set.add("a"); // ok
add(set, val); // ok
add(set, "a"); // ERROR
add<const char*>(set, "a"); // ok
Сообщение об ошибке (g ++ 4.2.4):
no matching function for call to ‘add(Set<const char*>&, const char [2])’
Похоже, это связано с тем, что "a"
имеет тип const char[2]
, а не const char*
. Кто-нибудь знает, как заставить это работать?