相关疑难解决方法(0)

MSVC constexpr函数'xyz'不能导致常量表达式

我已经创建了一个函数,它将多个较小的值连接成一个较大的值,同时保留值的bianry表示(例如,int argb从多个构建一个unsigned char r, g, b, a).我知道我也可以通过改变价值来实现这一点,但这不是这个问题的问题.

但是,如果我使用该函数实际从这些值生成一个整数,msvc会抛出编译器错误:

error C3615: constexpr function 'Color::operator int' cannot result in a constant expression
note: failure was caused by call of undefined function or one not declared 'constexpr'
note: see usage of '<lambda_dcb9c20fcc2050e56c066522a838749d>::operator ()'
Run Code Online (Sandbox Code Playgroud)

是一个完整的样本.Clang和gcc编译代码但msvc拒绝:

#include <type_traits>
#include <memory>

namespace detail
{
    template <typename From, typename To, size_t Size>
    union binary_fusion_helper
    {
        const From from[Size];
        const To to;
    };

    template <typename To, typename Arg, typename ...Args, typename = std::enable_if_t<(... …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ c++17

10
推荐指数
1
解决办法
1081
查看次数

VS2019最新更新:constexpr:FIXED字符串数组的“表达式未计算为常量”

注意:Stack Overflow 上有很多标题看起来非常相似的问题,但恕我直言,我发现没有一个问题实际上是重复的。

我多年来一直在我的项目中使用如下代码,没有出现任何问题。但是,自从最近更新 Visual Studio 2019(16.7.2 - 尽管可能16.7.1)以来,MSVC编译器已开始生成所示的错误(我将编译“标准”设置为 C++17 )。

#include <iostream>

class Foo {
public:
    Foo() { }
    static constexpr char Letters[6][10] = { "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot" };
};

int main()
{
    Foo f;
    for (int i = 0; i < 6; ++i) std::cout << f.Letters[i] << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误(在行的左大括号处constexpr):

错误 C2131:表达式未计算为常量
消息:失败是由读取未初始化的符号引起的

clang-cl编译器继续接受代码,没有任何警告。

我对这个问题有一个相当“微不足道”的修复,如下所示:

class Foo {
public:
    Foo() { }
    inline static const char …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ constexpr

6
推荐指数
1
解决办法
1210
查看次数

标签 统计

c++ ×2

visual-c++ ×2

c++17 ×1

constexpr ×1