Предположим, что входной параметр шаблона T
может иметь или не иметь внутреннюю переменную bar
.Я пытаюсь написать структуру, которая возвращает значение bar
, когда оно у нас есть, и возвращает некоторую константу, когда ее нет.Вот моя попытка:
struct A {
static constexpr unsgined int bar = 20;
hasBar = true;
};
struct B {
hasBar = false;
};
template <typename T, typename std::enable_if<T::hasBar, int>::type>
struct getBar {
static constexpr unsigned int bar = T::bar;
};
template <typename T, typename std::enable_if<!T::hasBar, int>::type>
struct getBar {
static constexpr unsigned int bar = 0;
};
int main() {
getBar<A>::bar; // Expect 20
getBar<B>::bar; //Expect 0
}
Я не могу скомпилировать этот код с C ++ 14.Компилятор жалуется, что: «шаблонный тип не относится к типу другого типа».
Почему у нас такая ошибка и как я могу ее исправить?