Вы должны иметь возможность манипулировать аргументами шаблона
template <std::string temp>
void f() {
// ...
}
f<"foo">();
f<"bar">(); // different function!?
Теперь impl должен придумать уникальную последовательность символов для std::string
или, в этом отношении, любого другого произвольного пользовательского класса, хранящего определенное значение, значение которого неизвестно реализации. , Кроме того, значение объектов произвольного класса не может быть вычислено во время компиляции.
Планируется рассмотреть возможность использования типов литеральных классов в качестве типов параметров шаблона для post-C ++ 0x, которые инициализируются константными выражениями. Они могут быть искажены путем рекурсивного искажения элементов данных в соответствии с их значениями (например, для базовых классов мы можем применить обход в глубину слева направо). Но это точно не сработает для произвольных классов.