Вопросы по теме 'if-constexpr'

Constexpr, если с типами, не являющимися шаблонами
#include <iostream> int foo(int x) { if constexpr (std::is_same_v<decltype(x), std::string>) { x = std::string(); } } int main(void) { return 0; } Этот код не компилируется ни на GCC 7, ни на Clang 5: error:...
370 просмотров
schedule 06.11.2021

Почему, если constexpr не может обойти оценку constexpr?
Я создаю статический цикл для диспетчеризации типов с использованием макросов. Вот чего я до сих пор добился. #define LOOP(n, f) \ static_assert(n <= 8 && "static loop size should <=...
89 просмотров
schedule 29.11.2021

Как я могу объединить эти три функции шаблона c ++ в одну по универсальной ссылке или std :: forward?
У меня эти коды взорваны template <typename T, void (*Fn)(T *)> struct CustomF1 final { void operator()(T *p) const { if (p) Fn(p); } }; template <typename T, void (*Fn)(T)> struct CustomF2 final { void operator()(T...
95 просмотров

если constexpr - почему полностью проверяется исключенный оператор?
Я возился с c ++ 20 consteval в GCC 10 и написал этот код #include <optional> #include <tuple> #include <iostream> template <std::size_t N, typename Predicate, typename Tuple> consteval std::optional<std::size_t>...
685 просмотров
schedule 26.09.2021

если constexpr не работает при передаче значения в качестве параметра, а не при передаче в качестве шаблона
У меня есть код, похожий на этот #include <array> constexpr std::size_t N = 16; template<typename Array> constexpr void takeparam(Array& data, size_t I) { if (I < N - 2) { // <- fails if I add constexpr data[I]...
35 просмотров
schedule 02.10.2021

Почему при оценке в constexpr оказывается недостижимый код?
Я ожидал, что компилятор разрешит недопустимые операторы или сообщения об ошибках в недостижимом коде, включающем constexpr, если: #include <type_traits> #include <iostream> struct ret_t; struct only_declared_t; auto test = [](auto a)...
180 просмотров
schedule 13.10.2021

переменная not-constexpr в if constexpr - clang vs. GCC
struct A{ constexpr operator bool()const{ return true; } }; int main(){ auto f = [](auto v){ if constexpr(v){} }; A a; f(a); } clang 6 принимает Код, GCC 8 отклоняет его: $ g++ -std=c++17 main.cpp main.cpp: In lambda...
455 просмотров

Переменная constexpr, захваченная внутри лямбда, теряет свою constexpr-ness
Этот код отлично компилируется в g ++ ( coliru ), но не в MSVC ( godbolt и мой VS2017). #include <type_traits> #include <iostream> template<class T> void f(){ constexpr bool b=std::is_same_v<T,int>; //#1 auto...
1411 просмотров

MSVC поглощает const из фундаментального параметра шаблона в методах шаблона с переменным числом аргументов, используя constexpr, если
У меня проблема, я почти уверен, что это ошибка MSVC, но, возможно, я что-то упускаю. Вот упрощенная версия фактического кода: template <typename... Args> class InnerType {}; template <typename... Args> class OuterType { public:...
75 просмотров

условие constexpr не является постоянным?
Я написал следующий код на C ++ 17: constexpr bool gDebug = true; template <typename T> constexpr const T& Select(const bool pCondition, const T& a, const T& b) { if constexpr (pCondition) { return a; } else...
1119 просмотров
schedule 01.07.2023

практический обходной путь static_assert(false); в else constexpr{}
Как легко static_assert(false) в else{} из if constexpr ? #include <type_traits> #include <iostream> class B{}; class C{}; class D{}; template<class T> void complexIf(){ if constexpr(std::is_same_v<T,B>){...
91 просмотров
schedule 13.04.2023

Ветка if constexpr не отбрасывается внутри лямбды, которая находится внутри функции шаблона.
Следующий код : #include <type_traits> struct X { static constexpr void x() {} }; template <class T1, class T2> constexpr bool makeFalse() { return false; } template <class T> void foo() { T tmp; auto f = [](auto...
613 просмотров
schedule 17.08.2023

Проблема с предложением required внутри if constexpr
При попытке реализовать if constexpr с requires clause на основе if constexpr и требует-выражения для специальной проверки понятий столкнулся со следующей проблемой: template<class P> concept TuplePair = requires(P p) { requires...
217 просмотров
schedule 18.02.2023

Является ли это использованием static_assert внутри, если constexpr правильно сформирован?
Вчера я прочитал пару ответов об использовании static_assert(false, "Some message") внутри предложения else if constexpr . Я понимаю, что в соответствии со стандартом он считается неправильным (даже если некоторые компиляторы, включая...
327 просмотров

Лучший способ подделать static_assert внутри, если constexpr?
Как вы, возможно, знаете, static_assert не заботится о том, находится ли он внутри активной ветки if constexpr (он всегда работает). У меня есть обходной путь, который использует недопустимые размеры массива, чтобы вызвать ошибку, но это уродливо....
39 просмотров
schedule 02.08.2023