Вопросы по теме '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 просмотров
schedule
14.09.2021
если 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 просмотров
schedule
27.06.2022
Переменная 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 просмотров
schedule
05.08.2022
MSVC поглощает const из фундаментального параметра шаблона в методах шаблона с переменным числом аргументов, используя constexpr, если
У меня проблема, я почти уверен, что это ошибка MSVC, но, возможно, я что-то упускаю.
Вот упрощенная версия фактического кода:
template <typename... Args>
class InnerType {};
template <typename... Args>
class OuterType {
public:...
75 просмотров
schedule
30.09.2022
условие 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 просмотров
schedule
13.02.2023
Лучший способ подделать static_assert внутри, если constexpr?
Как вы, возможно, знаете, static_assert не заботится о том, находится ли он внутри активной ветки if constexpr (он всегда работает).
У меня есть обходной путь, который использует недопустимые размеры массива, чтобы вызвать ошибку, но это уродливо....
39 просмотров
schedule
02.08.2023