Как отключить создание экземпляра шаблона, когда два типа равны?C++

Программы на C++. Форум разработчиков
Anonymous
Как отключить создание экземпляра шаблона, когда два типа равны?

Сообщение Anonymous »

У меня есть шаблонная функция с явной специализацией по типу. Я хочу, чтобы он работал в нескольких средах и нескольких компиляторах. Я обнаружил, что некоторые компиляторы по-разному интерпретируют некоторые встроенные типы. В частности, в 64-битной среде некоторые компиляторы рассматривают тип unsigned long как тот же, что и uint64_t, тогда как другие компиляторы считают их разными типами. Я пытаюсь выяснить (безуспешно), как использовать std::enable_if для включения/отключения создания экземпляра шаблона.
Вот пример.

Код: Выделить всё

// Template declaration
//
template T function(std::string_view x);

//
// One instantiation
//
template
uint64_t function(std::string_view x) {
// Implementation
}

//
// Another instance
//
template
unsigned long function(std::string_view x) {
// Implementation
}
Некоторые компиляторы рассматривают второе определение так же, как первое, и выдают ошибку, другие компиляторы без проблем принимают оба определения.
Мой вопрос: каков синтаксис для отключения второй функции, когда два типа считаются идентичными. Я пробовал использовать std::enable_if и std::is_same, но безуспешно, очевидно, контекст создания экземпляра шаблона немного отличается.
Любая помощь?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -are-equal

Вернуться в «C++»