У меня есть DSL на основе макросов C ++, который определяет макрос следующим образом:
#define RETURNS(...) \
enable_if_t<__VA_ARGS__ WHEN
#define WHEN(...) \
, EAT_ ## __VA_ARGS__ >
#define EAT_requires
Это для использования как:
template<class T>
auto some_function(T t) ->
RETURNS(int)
(requires SomeConcept<T>)
, который расширяется до:
template<class T>
auto some_function(T t) ->
enable_if_t<int, SomeConcept<T>>
(Когда включены концепции C ++ 20, это расширяется до реального предложения requires
.)
Я бы предпочел, чтобы порядок параметров был перевернут.То есть я хотел бы, чтобы это сгенерировалось так:
template<class T>
auto some_function(T t) ->
enable_if_t<SomeConcept<T>, int>
Я думаю, что это невозможно.Может ли какой-нибудь умный PP-хакер доказать, что я не прав?