Здравствуйте, vopl, Вы писали:
...
V>...
V> template<typename H> STest4(Tag<H>) requires std::is_same_v<H, TypeH1> { std::cout << "ctor(TypeH1)" << std::endl; }
V> template<typename H> STest4(Tag<H>) requires std::is_same_v<H, TypeH2> { std::cout << "ctor(TypeH2)" << std::endl; }
...
V>
чтобы всё заработало конструкторы оформил так:
STest4(Tag<TypeH1>) { cout << "ctor(TypeH1)" << endl; }
STest4(Tag<TypeH2>) { cout << "ctor(TypeH2)" << endl; }
Мне подходит. Спасибо.
Получается, что моя проблемы была в том, что я забыл про фигурные скобки и что нужно опредлить пустую Tag (... Tag{}; а не ... Tag; )
Я понимал, что вызов st5_1 выглядит как определение функции, но думал что, может, есть способ сказать компилятору, что это именно определения объектов. Нет так нет.