У меня есть шаблонная функция с явной специализацией по типу. Я хочу, чтобы он работал в нескольких средах и нескольких компиляторах. Я обнаружил, что некоторые компиляторы по-разному интерпретируют некоторые встроенные типы. В частности, в 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