草庐IT

c++ - GCC、字符串化和内联 GLSL?

我想使用宏字符串化来内联声明GLSL着色器字符串:#defineSTRINGIFY(A)#AconstGLchar*vert=STRINGIFY(#version120\nattributevec2position;voidmain(){gl_Position=vec4(position,0.0,1.0);});这使用VS2010构建并运行良好,但无法在gcc上编译:error:invalidpreprocessingdirective#version有没有办法以可移植的方式使用这样的字符串化?我试图避免每行引号:constGLchar*vert="#version120\n""att

c++ - GCC、字符串化和内联 GLSL?

我想使用宏字符串化来内联声明GLSL着色器字符串:#defineSTRINGIFY(A)#AconstGLchar*vert=STRINGIFY(#version120\nattributevec2position;voidmain(){gl_Position=vec4(position,0.0,1.0);});这使用VS2010构建并运行良好,但无法在gcc上编译:error:invalidpreprocessingdirective#version有没有办法以可移植的方式使用这样的字符串化?我试图避免每行引号:constGLchar*vert="#version120\n""att

c++ - GCC 导致 lambda 捕获的参数包的段错误

我有以下SSCCE:#include#includevoidfoo(conststd::string&a){std::coutvoidbar(Args&&...args){[&](){[&](){foo(args...);}();}();}intmain(){conststd::stringx("HelloWorld!");bar(x);}在clang++(3.9.1)下编译并发出“HelloWorld”。Gcc6.3在-O3下因段错误而失败。我可以通过引用显式传递指针和包来解决问题,将[&]()替换为[&args...]()。但是,到目前为止,我认为[&]与将所有参数一一列出一样。那

c++ - GCC 导致 lambda 捕获的参数包的段错误

我有以下SSCCE:#include#includevoidfoo(conststd::string&a){std::coutvoidbar(Args&&...args){[&](){[&](){foo(args...);}();}();}intmain(){conststd::stringx("HelloWorld!");bar(x);}在clang++(3.9.1)下编译并发出“HelloWorld”。Gcc6.3在-O3下因段错误而失败。我可以通过引用显式传递指针和包来解决问题,将[&]()替换为[&args...]()。但是,到目前为止,我认为[&]与将所有参数一一列出一样。那

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