Вы забыли несколько вещей. Заданный по умолчанию аргумент шаблона должен быть в объявлении класса. И вам нужно будет добавить имя типа.
#include <type_traits>
#include <iostream>
struct B {
template<typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type> B(T t);
double t;
};
template<typename T,
typename>
B::B(T t) {
this->t = static_cast<double>(t);
}
int main() {
B b(3);
std::cout << b.t << '\n';
}
Ага! Проблема состояла в том, что я имею LANG=en_US.UTF-8, и использовал xterm. По-видимому, это бесполезно. Установкой LANG=C или LANG=en_US все является большим теперь.
Каковы Ваши Настройки ЛЕНГА (назовите "экспорт" на ударе в терминале)? Попытайтесь установить Lang на правильное значение как
ЛЕНГ = "en_US.UTF-8"
использование
объявите-x ЛЕНГА = "en_US.UTF-8"
Это, кажется, проблема набора символов, поэтому возможно, Вы хотите перепроверить использование правильного.
Походит на безумие мне, но я просто хотел вставить это, Вы можете к Google для него более легко путем называния ^ циркумфлексом, который является тем, чем это обычно называют при использовании в качестве диакритического знака.