草庐IT

c++ - gcc 与 clang : expanding a captured parameter pack twice

考虑这个代码片段:intmain(){autofirst=[&](auto...one){autofaulty=[&](){[[maybe_unused]]autoi=(one+...);return(one+...);};faulty();};first(1);}另见ongodbolt.似乎当我尝试在内部lambda中将隐式捕获的参数包one扩展两次时,gcc会提示,但clang不会。请注意,当我明确捕获时,例如[&one...],gcc不再提示。对我来说,这看起来像是一个gcc错误,但我想得到比我更有经验的人的一些确认,因为我已经在带有可变捕获的clang中看到(不同的)错误行为h

c++ - GCC ICE——替代函数语法、可变参数模板和元组

(与C++0x,HowdoIexpandatupleintovariadictemplatefunctionarguments?相关。)以下代码(见下文)取自此discussion.目标是将函数应用于元组。我简化了模板参数并修改了代码以允许返回泛型类型的值。虽然原始代码编译正常,但当我尝试使用GCC4.4.3编译修改后的代码时,g++-std=c++0xmain.cc-omainGCC报告内部编译器错误(ICE),并显示以下消息:main.cc:Infunction‘intmain()’:main.cc:53:internalcompilererror:intsubst_copy,at

c++ - 有没有一种在 VS 中构建预编译 header 的方法不会使我的代码难以在 GCC 中构建?

过去,我在VC中使用预编译头文件来加快编译时间,但通常只在基本上只是一个小源代码目录的较小项目中使用。由于VC++要求所有文件都包含完全相同的header,而不管路径如何(比如“foo.h”而不是“../foo.h”),当你有不同的源代码嵌套目录时,事情就会变得很棘手。如果我所有的文件只是#include"foo.h"它可以工作,但只有当我打开预编译头文件时。为了在所有情况下都能正常工作,我需要制作虚拟的foo.h文件#include"../foo.h"这很快就会变得荒谬,尤其是当您有多个级别时。尽管我通常更喜欢Microsoft工具,但我不得不说GCC的系统(您可以手动将header

c++ - GCC 中的元组模板

我首先在VS2010中使用MicrosoftVC++开始使用C++。我最近找到了一些工作,但我一直在使用RHEL5和GCC。我的代码主要是原生C++,但我注意到一件事......GCC似乎无法识别头文件或元组模板。起初我以为这可能只是一个拼写错误,直到我查看cplusplus.com发现该header确实不是标准库的一部分。问题是我喜欢在VisualStudio中编写代码,因为它的环境比eclipse或netbeans更优越、更美观,而且调试也很容易。问题是,我已经编写了大量代码来使用元组,而且我真的很喜欢我的代码。我该如何处理这个问题?这是我的代码:usingstd::cout;us

c++ - gcc 报告基于版本的库的未引用符号

我的一个共享库my.so使用基于版本的符号作为库test.so中的符号@@test_1.2.3。当我将my.so共享库与我的可执行文件链接时,它显示“未引用的符号符号@@test_1.2.3”。当链接行如下时会发生这种情况-g++-omyexecutablemyexecutable.o-L/path-to-my.so-lmy-L/path-to-test.so-ltest如果我将链接链接更改为-g++-omyexecutablemyexecutable.o-L/path-to-my.so-lmy/path-to-test.so/libtest.so它有效。为什么libtest.so在使

c++ - 为什么在 gcc 库中重复声明相同的类型

在gcc库中,模板basic_stringbuf是从basic_streambuf派生而来的。在基类basic_streambuf中,已经声明了char_type、traits_type等类型名称。为什么它们在子类basic_stringbuf中重复声明?相关代码贴在下面//c++/4.2.1/streambuftemplateclassbasic_streambuf{public://@{/***Thesearestandardtypes.Theypermitastandardizedwayof*referringtonamesof(ornamesdependanton)thetem

c++ - 一个 gcc 编译错误(关于复制 c'tors)这看起来很奇怪(至少对我来说)

因此,我有以下代码无法在OSX上的gcc4.2.1上编译。我得到的错误是:testref.cpp:Infunction‘intmain()’:testref.cpp:10:error:‘A::A(constA&)’isprivatetestref.cpp:20:error:withinthiscontext这是代码#includeclassA{public:A(){i=0;printf("Actor\n");}~A(){printf("Adtor\n");}private:A(constA&other){i=other.i;printf("ACOPYCTOR\n");}A&operat

c++ - GCC - 'sizeof' 之前的预期不合格 ID - Android NDK 中的 IT++ 4.2

我已成功在我的AndroidNDK项目中构建CLAPACK。接下来,我尝试将IT++4.2库放入其中。但是,我有一些无法修复的错误。这些是我在我的项目中所做的事情:首先,我将itpp文件夹复制到我项目的jni文件夹中,并修改了itpp中的config.h。因为我在(放在..android-ndk-r7b\platforms\android-9\arch-arm\usr\include中)找到了isfinite、isinf和isnan函数。我将HAVE_DECL_ISINF、HAVE_DECL_ISFINITE和HAVE_DECL_ISNAN设置为1。config.h#ifndefCON

c++ - gcc 的 boost::variant 链接器错误

我有点发疯了,想弄清楚为什么以下代码无法编译:#include#include#include#includetypedefunsignedlonglongvery_long;typedefboost::variantvariants_type;typedefstd::arrayrow_type;typedefstd::forward_listrows_holder_type;intmain(){rows_holder_typerows;row_typerow_data;row_data[0]=0;row_data[1]=0;row_data[2]=0;row_data[3]=0;ro

c++ - 使用 GCC 4.6.2 C++ Qt、MinGW、Vista 设置堆栈大小

我想增加我的程序的堆栈大小,因为我有一个复杂的递归算法,迭代重写将是一个真正的痛苦。我正在使用GCCC++4.6.2。MinGw,在Vista上使用Qt.pro文件构建(我使用Qt作为GUI前端)。本网站的建议是使用:-gcc-Wl,--stack,4194304并将其发送到g++链接阶段:-LIB+=-Wl,--stack,4194304但是链接器错误:-g++:error:unrecognizedoption'--stack,4194304'我尝试使用QMAKE_CXXFLAGS+=将选项发送到编译阶段,但g++仍然barfs。唯一不会barf的选项是GCC文档(.pdf4.5.0