constexpr
为什么C++的 noexcept() 对constexpr函数返回false?
此问题在此处已有解答: noexcept 行为的 constexpr 函数 (共2 条答案) 已于17小时前关闭。 根据cppreference.com对 constexpr的条目(此处),如果函数是constexpr,noexcept() 将返回true。以下是相关示例: constexpr int f() { return 0; } constexpr bool b2 = noexcept(f
在不使用constexpr的情况下使用模板
在我实际的代码中,我有一个模板函数,其行为会根据输入的数据类型而变化。我必须找到一种方法,将输入数组的数据类型传递给该函数。变量tA、tB和tC是一个enum的一部分,这个enum提示输入数组的数据类型。若有助于理解,在实际代码中,输入数组是void*。问题在于,在我的实际代码中(我无法提供)变量tA、tB和tC不能是constexpr,这会在编译时导致错误: error: non-type template argument is not a constant expression 56 | some_
字符串字面量,以及在C++23中的constexpr string msg = format(...)
我想在编译时使用format(...) 构造字符串字面量; 关于如何实现它,有些信息互相矛盾,我还做不到。 对于一个应用,我通常需要几个带有格式化的字符串字面量。 应 @Oersted的请求,我给出一个简要概括,说明我的需求。 通常的做法很简单,但属于“老派”,并且使用预处理器。我的问题是:“如何在字符串字面量中嵌入constexpr值,获得与旧式做法大致相同的灵活性”。欢迎任何“现代C++”的解决方案。 下面是更多说明,以及我在互联网上找到的一些消息,给出如何实现的代码,但示例我无法让GCC编译通过。
C语言中的constexpr结构体与整型常量表达式
在阅读N3220草案标准中关于“6.6常量表达式”时,显然可以看出: constexpr struct { int i; } S = {.i = 100}; S.i是一个整数常量表达式。 但为什么在编译需要整数常量表达式的代码时,Clang会发出这个检查呢? int main(void) { int i = get_i(); switch(i) { case S.i: break; // warning: expression is not an integer constant expression;
在遍历非静态数据成员时,`template for` 不是constexpr
我在gcc 16.1中尝试新的C++26类型反射特性,并有一段用于将结构体/类转换为JSON的基础代码(见文末)。 我的代码: #include #include #include namespace __impl { template struct replicator_type { template constexpr void operator>>(F body) const { (body.t
React Native 0.82.1在 Xcode 26上构建失败,原因是Yoga、fmt、glog的 C++ constexpr错误
环境 React Native: 0.82.1 React: 19.1.1 Node: 20.19.6 CocoaPods: 最新版 Xcode: 26 macOS Tahoe 错误 构建在原生依赖项中失败,例如: Yoga fmt glog 一些主要错误包括: constexpr function never produces a constant expression call to consteval function ... is not a constant expression 以及来自以下文
在constexpr的上下文中使用consteval函数参数
我在尝试在constexpr上下文中使用一个consteval函数参数: consteval auto foo(int size) { std::array arr; // error: size is not constexpr auto const_size = std::meta::reflect_constant(size); auto array_type = std::meta::substitute(^^std::array, {^^int, const_size});
EDG与 GCC/Clang在常量表达式中对右值引用行为的差异
我写了以下程序,它被MSVC与 EDG接受,但被clang与 gcc拒绝。 演示。 template struct s{ constexpr static const int&& n = N; constexpr static int&& p = N; }; template void f() { static_assert(T::n == 1); } template void g() { static_assert(T::p == 1);
今天C++23的 std::is_implicit_lifetime有问题吗?
我在clang 22.1并使用 -stdlib=libc++实现 std::is_implicit_lifetime 时尝试了以下内容: #include #include #include struct TC_NotILT { int val; // user-declared constructors thus not an aggregate, thus not implicit lifetime type TC_NotILT(i
带有常量内联类成员的std::format会导致“对consteval函数的调用未产生有效的常量表达式”
我有一个用公开常量定义的 Constants 类: class Constants { public: //... inline static const std::wstring SPECIAL_FOLDER_KEY = L""; }; 现在,我需要使用 std::format() 基于占位符替换来返回一个新字符串: std::wstring folderName = ...; std::wstring specialFolderKey = std::format(