, , , MSVC const char*, void*.
, void* void const*, . "", void const*. , : "" - char const(&)[1] ( const char), std::string, char const(&)[1] , std::string. std::string , , gcc, const !
, std::string.
template<typename S, typename=typename std::enable_if<std::is_convertible<S,std::string>::value>::type>
void f(S&&s){
f(std::string{std::forward<S>(s)});
}
( const ).
() :
void f(void const* v, std::false_type){
std::cout << "f(void*)\n";
}
void f(std::string const& s, std::true_type){
std::cout << "f(const std::string &)\n";
}
template<typename T>
void f(T&&t){
return f(std::forward<T>(t), std::is_convertible<T,std::string>() );
}
both of them - methods of manual scheduling of overload, are shifted to the side std::string.
living example
Note that literals are std::stringnow possible in C ++, but I would advise against requiring them based on fragility.
source
share