Можно ли объявить новый тип (пустую структуру или структуру без реализации) на лету?
Например
constexpr auto make_new_type() -> ???;
using A = decltype(make_new_type());
using B = decltype(make_new_type());
using C = decltype(make_new_type());
static_assert(!std::is_same<A, B>::value, "");
static_assert(!std::is_same<B, C>::value, "");
static_assert(!std::is_same<A, C>::value, "");
"Ручное" решение
template <class> struct Tag;
using A = Tag<struct TagA>;
using B = Tag<struct TagB>;
using C = Tag<struct TagC>;
или даже
struct A;
struct B;
struct C;
но для шаблонизации/мета было бы неплохо использовать магическую make_new_type()
.
Может ли что-то подобное быть возможным сейчас, когда метапрограммирование с состоянием плохо сформировано?