Files
clang-uml/tests/t00056/t00056.cc
2023-02-21 19:43:29 +01:00

57 lines
1.1 KiB
C++

#include <string>
namespace clanguml {
namespace t00056 {
// Constraint expression
template <typename T>
concept MaxFourBytes = sizeof(T) <= 4;
// Simple requirement
template <typename T>
concept Iterable = requires(T container) {
container.begin();
container.end();
};
// Type requirement
template <typename T>
concept HasValueType = requires { typename T::value_type; };
template <typename T>
concept ConvertibleToString = requires(T s) { std::string{s}; };
// Compound requirement
// ...
// Combined concept
template <typename T>
concept IterableWithValueType = Iterable<T> && HasValueType<T>;
template <typename T>
concept IterableWithSmallValueType =
IterableWithValueType<T> && MaxFourBytes<T>;
// Simple type constraint
template <MaxFourBytes T> struct A {
T a;
};
// Requires constant expression
template <typename T>
requires MaxFourBytes<T>
struct B {
T b;
};
// Anonymous concept requirement
template <typename T>
requires requires(T t) {
--t;
t--;
}
struct C {
T c;
};
}
}