I\'m trying to tackle the following problem: I would like to do an if
statement that does something depending on whether the argument of a template is a specific ob
In a regular if
statement, both branches must be valid code. In your case int.length()
makes no sense.
In C++17 you could simply use constexpr if
:
if constexpr(std::is_same::value)
std::cout << arg.length() << std::endl;
else
std::cout << "The argument is not a string" << std::endl;
demo
In C++11 (or older) you can employ overloading to achieve similar result:
void foo(std::string const& str){
std::cout << str.length() << std::endl;
}
template
void foo(T const&){
std::cout << "The argument is not a string" << std::endl;
}
template
void is_string(const T& arg) {
foo(arg);
}
demo