TL;DR 在阅读整篇文章之前,需要知道: 我已经找到了解决方案自己发现的,但我仍然渴望知道分析是否正确; 我将解决方案打包成了一个fameta::counter类,可以解决一些剩余的问题。你可以在github上找到它; 你可以在godbolt上使用它。 一切是如何开始的 自从Fi...
在C++11标准中,当在头文件中定义constexpr和static constexpr全局变量时,它们之间有什么区别?更具体地说,当多个翻译单元包含相同的头文件时,哪个声明(如果有)可以保证在所有翻译单元中定义相同的变量? 例如: cexpr.h:#ifndef CEXPR_H #def...
下面的代码在clang++ 3.7.0下编译通过,但在g++ 5.3.1下被拒绝了。两个编译器都使用了-std=c++14选项。哪个编译器是正确的?有人知道标准中讨论了这个吗?谢谢。#include <stdexcept> using namespace std; constex...
为什么std::initializer_list<_E>::size不能在static_assert中使用,即使它在我的libstdc++(版本4.6)中声明为constexpr? 例如,以下代码: template<class T, int Length> cla...
是否有一种方法可以决定某个东西是否可以进行constexpr评估,并将结果用作constexpr布尔值? 我的简化用例如下: 有没有办法判断一个东西是否能够被 constexpr 评估, 并且把结果用作 constexpr 布尔值呢?我的简单应用场景如下: template <...
所以,我在尝试使用这个简单的程序(省略了头文件),对constexpr进行一些测试时,MSVC(Visual Studio 2012)在试图用constexpr关键字限定我的函数时报错:constexpr int factorial(int n) { return n <= 1 ...
在C++11中,是否有可能根据一个表达式是否为常量表达式(即constexpr),生成编译时布尔值?一些stackoverflow上的问题涉及到这个问题,但我没有看到直接的答案。