У меня нет родительского интерфейса, не являющегося шаблоном, и я пытаюсь использовать SFINAE в дочернем классе. Все, что я хочу сделать, это убедиться, что тип первого параметра шаблона может быть создан без каких-либо аргументов. Моя проблема в предварительной декларации. Насколько я понимаю, SFINAE требует, чтобы класс был объявлен заранее и , а затем специализированный. Это то, что я сейчас пытаюсь:
class ParentInterface
{};
template<class, class = void>
class Child : public ParentInterface; // <-- This semi-colon is the error
template<class Ty>
class Child<Ty, std::enable_if_t<std::is_constructible_v<Ty>>>
: public ParentInterface
{};
Ответы, которые я смог найти, были связаны с наследованием от класса SFINAE. Что мне нужно сделать, чтобы получить желаемую функциональность?