草庐IT

gcc-plugin

全部标签

c++ - 在默认初始化程序 gcc 与 clang 中使用 lambda

#include#includeintmain(){structpoint_of_cone{doublex,y;doublez=[&]{usingstd::sqrt;returnsqrt(x*x+y*y);}();};point_of_conep={3.0,4.0};assert(p.z==5.0);}对于来自主干的clang++工作正常,但对于来自主干的g++失败并显示错误消息(link):error:'this'wasnotcapturedforthislambdafunction在命名空间范围内定义point_of_cone对两者都适用。使用[this]lambda捕获稍作修改的

c++ - 在默认初始化程序 gcc 与 clang 中使用 lambda

#include#includeintmain(){structpoint_of_cone{doublex,y;doublez=[&]{usingstd::sqrt;returnsqrt(x*x+y*y);}();};point_of_conep={3.0,4.0};assert(p.z==5.0);}对于来自主干的clang++工作正常,但对于来自主干的g++失败并显示错误消息(link):error:'this'wasnotcapturedforthislambdafunction在命名空间范围内定义point_of_cone对两者都适用。使用[this]lambda捕获稍作修改的

c++ - Clang 和 GCC 在强制转换 C++17 中的非类型模板参数的自动说明符中存在分歧

我基本上有一个依赖于非类型模板参数的类。我定义了一个转换,因此非类型模板参数N的对象可以转换为另一个M。我有一个可以重现这种情况的最小示例:templateclassTest{public:typedefdecltype(Integral)value_type;staticconstexprvalue_typeN=Integral;constexprTest(constvalue_type&x=0);templateconstexprexplicitoperatorTest()const;private:value_typen;};templateconstexprTest::Test

c++ - Clang 和 GCC 在强制转换 C++17 中的非类型模板参数的自动说明符中存在分歧

我基本上有一个依赖于非类型模板参数的类。我定义了一个转换,因此非类型模板参数N的对象可以转换为另一个M。我有一个可以重现这种情况的最小示例:templateclassTest{public:typedefdecltype(Integral)value_type;staticconstexprvalue_typeN=Integral;constexprTest(constvalue_type&x=0);templateconstexprexplicitoperatorTest()const;private:value_typen;};templateconstexprTest::Test

c++ - 可以将不同的 GCC 方言联系在一起吗?

我知道原则上这可能是未定义的行为,但为了处理大型项目,这是我关于GCC的问题:假设我用gcc-std=c++98编译一个转换单元,另一个用-std=c++11编译,使用完全相同的编译器安装.有什么保证我可以链接两个目标文件并获得一个定义明确的程序吗?据我所知,由于宏的不同,潜在的问题只能来自库头的不同View,而那些反过来最多添加新的成员函数,但绝不是成员对象,到标准库类。这是否会让使用不同语言方言选项编译大型项目的不同部分变得可以接受?更新:我应该添加一个正交问题:使用两个不同版本的GCC(比如4.3和4.6)怎么样,但相同方言选项(-std=c++98)?上市inthisGCCdo

c++ - 可以将不同的 GCC 方言联系在一起吗?

我知道原则上这可能是未定义的行为,但为了处理大型项目,这是我关于GCC的问题:假设我用gcc-std=c++98编译一个转换单元,另一个用-std=c++11编译,使用完全相同的编译器安装.有什么保证我可以链接两个目标文件并获得一个定义明确的程序吗?据我所知,由于宏的不同,潜在的问题只能来自库头的不同View,而那些反过来最多添加新的成员函数,但绝不是成员对象,到标准库类。这是否会让使用不同语言方言选项编译大型项目的不同部分变得可以接受?更新:我应该添加一个正交问题:使用两个不同版本的GCC(比如4.3和4.6)怎么样,但相同方言选项(-std=c++98)?上市inthisGCCdo

c++ - 为什么使用 gcc 在 Linux 和 Windows 上打包结构的大小会不同?

在下面的代码中,为什么在Linux和Windows下使用gcc编译时打包结构的大小不同?#include#include//id3headerfromanmp3filestructheader{uint8_tversion[2];uint8_tflags;uint32_tsize;}__attribute__((packed));intmain(intargc,char**argv){printf("%u\n",(unsignedint)sizeof(header));return0;}使用的gcc版本:$g++--versiong++(Ubuntu/Linaro4.5.2-8ubun

c++ - 为什么使用 gcc 在 Linux 和 Windows 上打包结构的大小会不同?

在下面的代码中,为什么在Linux和Windows下使用gcc编译时打包结构的大小不同?#include#include//id3headerfromanmp3filestructheader{uint8_tversion[2];uint8_tflags;uint32_tsize;}__attribute__((packed));intmain(intargc,char**argv){printf("%u\n",(unsignedint)sizeof(header));return0;}使用的gcc版本:$g++--versiong++(Ubuntu/Linaro4.5.2-8ubun

c++ - GCC 和 clang (SFINAE) 之间的重载解析行为差异

GCC接受以下代码:templatestructmeta{typedeftypenameT::typetype;};structS{};templatetypenamemeta::typefoo(T,S);intfoo(int,int);intmain(){foo(0,0);}但是clang拒绝它并出现以下错误:test.cpp:4:22:error:type'int'cannotbeusedpriorto'::'becauseithasnomemberstypedeftypenameT::typetype;^test.cpp:10:10:note:ininstantiationoft

c++ - GCC 和 clang (SFINAE) 之间的重载解析行为差异

GCC接受以下代码:templatestructmeta{typedeftypenameT::typetype;};structS{};templatetypenamemeta::typefoo(T,S);intfoo(int,int);intmain(){foo(0,0);}但是clang拒绝它并出现以下错误:test.cpp:4:22:error:type'int'cannotbeusedpriorto'::'becauseithasnomemberstypedeftypenameT::typetype;^test.cpp:10:10:note:ininstantiationoft