Сообщение Re[2]: Concept equality preservation от 26.02.2024 21:38
Изменено 26.02.2024 22:11 rg45
Re[2]: Concept equality preservation
Здравствуйте, Кодт, Вы писали:
К>Поэтому во время компиляции нам наплевать, изменяются ли значения. Компилятор вообще не оперирует значениями.
К>(Хотя! Если мы туда присобачим какие-нибудь constexpr функции... Надо проверить!)
Ну а почему нет?
http://coliru.stacked-crooked.com/a/74d67fe96e7cc04a
Компайл-тайм юнит-тесты
К>Поэтому во время компиляции нам наплевать, изменяются ли значения. Компилятор вообще не оперирует значениями.
К>(Хотя! Если мы туда присобачим какие-нибудь constexpr функции... Надо проверить!)
Ну а почему нет?
http://coliru.stacked-crooked.com/a/74d67fe96e7cc04a
template <auto expected, auto f, auto...args>
concept ExpectEqual = (expected == f(args...));
constexpr size_t factorial(size_t x) { return x > 0 ? x * factorial(x - 1) : 1; }
static_assert(ExpectEqual<1, factorial, 0>);
static_assert(ExpectEqual<1, factorial, 1>);
static_assert(ExpectEqual<2, factorial, 2>);
static_assert(ExpectEqual<6, factorial, 3>);
static_assert(ExpectEqual<24, factorial, 4>);
static_assert(ExpectEqual<120, factorial, 5>);
static_assert(ExpectEqual<720, factorial, factorial(3)>);
static_assert(!ExpectEqual<0, factorial, 0>);
Компайл-тайм юнит-тесты
Re[2]: Concept equality preservation
Здравствуйте, Кодт, Вы писали:
К>Поэтому во время компиляции нам наплевать, изменяются ли значения. Компилятор вообще не оперирует значениями.
К>(Хотя! Если мы туда присобачим какие-нибудь constexpr функции... Надо проверить!)
Ну а почему нет?
http://coliru.stacked-crooked.com/a/80f1f5a269b4f138
Компайл-тайм юнит-тесты
К>Поэтому во время компиляции нам наплевать, изменяются ли значения. Компилятор вообще не оперирует значениями.
К>(Хотя! Если мы туда присобачим какие-нибудь constexpr функции... Надо проверить!)
Ну а почему нет?
http://coliru.stacked-crooked.com/a/80f1f5a269b4f138
template <auto expected, auto f, auto...args>
concept ExpectEqual = (expected == f(args...));
template <auto expected, auto f, auto...args>
concept ExpectNotEqual = !ExpectEqual<expected, f, args...>;
constexpr size_t factorial(size_t x) { return x > 0 ? x * factorial(x - 1) : 1; }
static_assert(ExpectEqual<1, factorial, 0>);
static_assert(ExpectEqual<1, factorial, 1>);
static_assert(ExpectEqual<2, factorial, 2>);
static_assert(ExpectEqual<6, factorial, 3>);
static_assert(ExpectEqual<24, factorial, 4>);
static_assert(ExpectEqual<120, factorial, 5>);
static_assert(ExpectEqual<720, factorial, factorial(3)>);
static_assert(ExpectNotEqual<0, factorial, 0>);
static_assert(ExpectNotEqual<7, factorial, 3>);
static_assert(ExpectNotEqual<1, factorial, 1, 2, 3, 4, 5>);
Компайл-тайм юнит-тесты