C++ 强制转换后无法访问constexpr CRTP类的成员函数

C++ 强制转换后无法访问constexpr CRTP类的成员函数,c++,reference,c++17,constexpr,C++,Reference,C++17,Constexpr,基于我对我的问题的回答,我试着更进一步(玩弄表达式模板) 因此,正如答案所建议的,我现在使用静态变量作为输入,所有内容都能正确编译(在MSVC 2019上) 但是,在添加constepr static auto val=expr[0]时,我得到错误C2131:表达式的计算结果不是常量。问题似乎出在m_lhs[idx]和m_rhs[idx]上,因为它们的计算结果似乎不是常数,尽管我已经将所有操作符[]标记为constexpr 有可能解决这个问题吗 #包括 模板 结构向量 { constexpr c

基于我对我的问题的回答,我试着更进一步(玩弄表达式模板)

因此,正如答案所建议的,我现在使用
静态
变量作为输入,所有内容都能正确编译(在MSVC 2019上)

但是,在添加
constepr static auto val=expr[0]
时,我得到错误
C2131:表达式的计算结果不是常量。问题似乎出在
m_lhs[idx]
m_rhs[idx]
上,因为它们的计算结果似乎不是常数,尽管我已经将所有
操作符[]
标记为
constexpr

有可能解决这个问题吗

#包括
模板
结构向量
{
constexpr const VecType&get()const noexcept
{
返回静态_cast(*此);
}
};
模板
类FixedSizeVector:公共向量
{
公众:
constexpr explicit FixedSizeVector(const int(&array)[Size])noexcept
:m_向量()
{
对于(大小i=0;iconstexpr static auto val=expr[0];/*MSVC错误。对我来说很好,并在gcc和clang上编译。这似乎是由get()函数和基向量类强制转换的组合造成的。这编译:。我更改了运算符+以接受任何类型(我怀疑您不希望这样做,可能在您的用例中使用enable_)。您可以将其与:MSVC bug一起使用。对我来说,它看起来不错,并在gcc和clang上编译。它似乎是由get()函数和基向量类强制转换的组合造成的。此编译:。我更改了运算符+以接受任何类型(我怀疑您不希望这样做,如果您的用例需要,可能会使用enable_)。您可以将其与: