Я пытаюсь реализовать следующую концепцию
template<typename T>
concept GameLogic = requires(T a) {
typename T::StateType;
typename T::EventType;
{ a.initialState()->T::StateType }; // <-- relevant bit
};
, где я хочу навязать, что initialState()
возвращаемый тип является вложенным типом того же класса.
Определение концепции не не выдает ошибок (g cc 9.2), но следующая реализация GameLogic
не удовлетворяет требованию:
class SimpleGameLogic {
public:
using StateType = SimpleState;
using EventType = SimpleEvent;
StateType initialState() {
return _initialState;
}
private:
StateType _initialState;
};
Я пробовал некоторые варианты вышеуказанного синтаксиса, но не могу найти правильный ... или это еще не может быть реализовано? Что я делаю не так?