Я писал http://en.cppreference.com/w/cpp/language/typeid для написания кода, который делает разные вещи для разных типов.
Код приведен ниже, и пояснение дано в комментариях.
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename T>
void test_template(const T &t)
{
if (typeid(t) == typeid(double))
cout <<"double\n";
if (typeid(t) == typeid(string))
cout <<"string\n";
if (typeid(t) == typeid(int))
cout <<"int\n";
}
int main()
{
auto a = -1;
string str = "ok";
test_template(a); // Prints int
test_template("Helloworld"); // Does not print string
test_template(str); // Prints string
test_template(10.00); // Prints double
return 0;
}
Почему test_template(str)
печатает "string", тогда как test_template("Helloworld")
не работает?
BTW, моя версия g++ - g++ (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.4) 5.4.0 20160609.