It is fairly straightforward with SFINAE:
using Integral = std::enable_if_t<std::is_integral_v<Foo>>;
I want the syntax something like:
#include <iterator>
using iterator = std::bidirectional_iterator ContainerIterator;
which is not supported.
The workaround is to use a type-checking class:
template <std::bidirectional_iterator T>
struct CheckContainerIterator {
using type = T;
};
using iterator = CheckContainerIterator<ContainerIterator>::type;
Is there a more concise way of achieving this?
The reason being is that the SFINAE version of bidirectional_iterator
does not seem to present in the standard. So I either have to implement it or use the type-checking class.
question from:
https://stackoverflow.com/questions/65848102/is-it-possible-to-put-constraints-on-type-alias-with-concept 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…