这是我的基本代码:
然而,如果我使用一个静态的constexpr成员变量,它就可以正常工作。请参见这里。
#include <iostream>
#include <array>
class cColor {
public:
enum eValue { k_Red, k_Green, k_Blue };
static constexpr std::size_t NumValues() { return 3; }
static constexpr std::array<eValue, NumValues()> Values() { return {k_Red, k_Green, k_Blue}; }
};
int main() {
std::cout << "NumColors=" << cColor::NumValues() << '\n';
}
我试图将Values()
声明为静态constexpr
,并且认为我应该能够使用NumValues()
,因为它也是一个静态constexpr
。然而,这个程序编译失败了,并抛出了这个错误:
main.cpp:8:39: error: non-type template argument is not a constant expression
static constexpr std::array<eValue, NumValues()> Values() { return {k_Red, k_Green, k_Blue}; }
^~~~~~~~~~~
main.cpp:8:39: note: undefined function 'NumValues' cannot be used in a constant expression
main.cpp:7:32: note: declared here
static constexpr std::size_t NumValues() { return 3; }
然而,如果我使用一个静态的constexpr成员变量,它就可以正常工作。请参见这里。
#include <iostream>
#include <array>
class cColor {
public:
enum eValue { k_Red, k_Green, k_Blue };
static constexpr std::size_t NumValues {3};
static constexpr std::array<eValue, NumValues> Values() { return {k_Red, k_Green, k_Blue}; }
};
int main() {
std::cout << "NumColors=" << cColor::NumValues << '\n';
}
那么,静态constexpr成员函数是什么导致代码无法编译?