Мне нравится разделять объявление и реализацию моих классов. Я знаю, что реализация шаблонов классов и функций также должна идти в файл заголовка, это не проблема.
У меня проблемы с реализацией этого класса:
template <size_t S, std::enable_if_t<(S > 0), int> = 0>
class Foo {
public:
Foo();
}
Пока я пробовал:
template<size_t S>
Foo<S>::Foo() {}
который потерпел неудачу с
ошибка C3860: в списке аргументов шаблона после имени шаблона класса должны быть указаны параметры в том порядке, в котором они указаны в списке параметров шаблона.
ошибка C2976: 'Foo ‹S, ‹__formal››': слишком мало аргументов шаблона
а также
template<size_t S, int i>
Foo<S, i>::Foo() {}
который потерпел неудачу с
ошибка C3860: в списке аргументов шаблона после имени шаблона класса должны быть указаны параметры в том порядке, в котором они указаны в списке параметров шаблона.
ошибка C3855: 'Foo ‹S, ‹un named-symbol››': параметр шаблона '__formal' несовместим с объявлением
Я также попытался изменить объявление шаблона на
template <size_t S, typename = std::enable_if_t<(S > 0)>>
что также не удалось с первым сообщением об ошибке.
Как правильно это сделать?