Итак, я хотел бы сделать несколько продвинутых хакеров на уровне типов, для которых мне бы очень хотелось написать концепцию, требующую, чтобы тип имел ассоциированное с ним значение constexpr int
, которое я смогу использовать позже.в той же концепции, что и целочисленный std::array
параметр шаблона.
Можно написать
template<typename T>
concept bool HasCount = requires {
typename T::count;
};
, но это не то, что я хочу;Я бы хотел, чтобы T::count
был static constexpr int
.Однако код (даже не включая необходимый constexpr
)
template<typename T>
concept bool HasCount = requires {
int T::count;
};
не компилируется с «error: ожидаемое первичное выражение перед« int »» в GCC 7.3.0.
Еще одна неудачная попытка: можно написать это, что потребует static int T::count()
:
template<typename T>
concept bool HasCount = requires {
{T::count()} -> int;
};
, но не этого, чего я хочу:
template<typename T>
concept bool HasCount = requires {
{T::count()} -> constexpr int;
{T::count() constexpr} -> int; // or this
{constexpr T::count()} -> int; // or this (please forgive me for fuzzing GCC instead of reading the manual, unlike perl C++ is not an empirical science)
};
Итак, я 'Хотелось бы знать, возможно ли каким-либо образом требовать, чтобы выражение понятия было квалифицировано constexpr, или нет, если есть причина, по которой это невозможно, или просто не включено в спецификацию.