Как отключить создание экземпляра шаблона, когда два типа равны?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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