草庐IT

c++ - 无法使此代码在 MSVC 2015 和 GCC 7.3 之间交叉编译

当我为我的项目编写代码时,我发现了一个非常奇怪的情况,我的C++11代码无法在GCC7.3和之间交叉编译>MSVC2015。案例基本上是这样的://.HfiletemplatestructOuter{Xx={};templatestructInner{Yy={};Inner&operator++();};};//.INLfiletemplatetemplateinlineOuter::Inner&Outer::Inner::operator++(){++y;return*this;}//.CPPfile#includeintmain(){Outer::Innera;++a;std::c

C++ GCC4.4 警告 : array subscript is above array bounds

我最近升级到GCC4.4(MinGWTDM构建),现在以下代码会产生这些警告:Inmemberfunction'voidConsole::print(conststd::string&)':warning:arraysubscriptisabovearraybounds代码如下:voidConsole::print(conststd::string&str){std::stringnewLine(str);if(newLine.size()>MAX_LINE_LENGTH){sf::Uint32stringSize=newLine.size();for(sf::Uint32insert

c++ - 如何更新到 mingw-gcc 4.8.2?

我想在c++11中使用正则表达式,gcc4.8.2支持它。但是MinGW安装程序最多只支持gcc4.8.1。我怎样才能将它更新到gcc4.8.2? 最佳答案 您可以自己手动安装。4.8.2availablehere有一个MinGW-w64发行版.你需要7zip提取文件内容。将其解压缩到您选择的位置后,只需将bin子目录从那里添加到您的环境path即可。例如,如果您将工具链提取到x:\mingw32-4.8.2中,则使用添加x:\mingw32-4.8.2\bin>setxpath"%path%;x:\mingw32-4.8.2\bi

c++ - 将 C++11 regexp 与 gcc 4.8.2 一起使用时出现奇怪的结果(但适用于 Boost regexp)

这个问题在这里已经有了答案:Isgcc4.8orearlierbuggyaboutregularexpressions?(3个答案)关闭8年前。我尝试使用C++11的正则表达式,但即使在简单的示例中也失败了。从外面看,它似乎只是比较字符串,例如:std::regex_match(std::string{""},std::regex{"a?"})//false(???)std::regex_match(std::string{"a?"},std::regex{"a?"})//true(???)相比之下,Boost的正则表达式库的行为符合我的预期:boost::regex_match(st

c++ - 编译对齐的结构在 GCC 中给出奇怪的警告

我们有多个结构,它们是16字节对齐的。在以前版本的GCC中一切正常。自从我们升级到GCC4.8.2(之前我们使用4.6)后,我们收到了一堆关于这些结构的警告。一个示例结构为:typedefstruct_STRUCT{_STRUCT():a(0),b(0){};uint32_ta;uint32_tb;}STRUCT__attribute__((aligned(16)));编译此代码会在使用此strcut的地方引发以下警告:warning:ignoringattributesontemplateargument'_STRUCT'[enabledbydefault]我真的不明白,这个警告试图

c++ - 用于 LLVM 的 GCC 工具链

我在RHEL6.x机器上运行,当然安装了GCC4.4。我希望在这台机器上运行LLVM。为此,我必须从源代码编译它。为了做到这一点,我需要一个更现代的GCC版本。所以,关注theinstructions,我已经构建了GCC4.8.2:[snip]%$PWD/../gcc-4.8.2/configure--prefix=$HOME/toolchains--enable-languages=c,c++%make-j$(nproc)%makeinstall我以root身份登录,所以$HOME/toolchains解析为/root/toolchains。满足LLVM的先决条件后,我就可以配置和构

c++ - 使用 GCC 编译模板友元错误,但不使用 clang

此代码使用clang3.7.1编译(没有诊断),但使用GCC5.3.0编译失败>(liveexample):#includetemplatestructA{voidfoo(){static_cast(this)->implementation();}};structCrtp:A{templatefriendstructA;private:voidimplementation(){std::coutGCC的错误信息如下:main.cpp:13:16:error:specializationof'A'afterinstantiationfriendstructA;哪个是正确的,为什么?是G

c++ - 在 OSX 上使用 GCC 映射文件

我在MacOSX上使用GCC。我试图让GCC创建项目中所有符号的映射(或列表)文件,以便它包含映射它们的地址。我在GCC手册中读到,生成此类映射文件的一种方法是使用-Xlinker选项将系统特定标志传递给GCC链接器。但我找不到选项本身是什么。有谁知道在OSX上使用GCC是否可行? 最佳答案 ld选项是-map。使用-Xlinker你会写:gcc-Xlinker-map-Xlinker/path/to/map...你也可以用-Wl写得更简洁:gcc-Wl,-map,/path/to/map...

c++ - GCC:由于数据类型的范围有限,比较总是正确的——在模板参数中?

我想编写一个模板,返回可以表示给定数字的最小有符号整数类型。这是我的解决方案:/***HelperforIntTypeThatFits.*Templateparametersindicatewhetherthegivennumberfitsinto8,16or32*bits.Ifneitherofthemistrue,itisassumedthatitfits64bits.*/templatestructIntTypeThatFitsHelper{};//specializationsforpickingtherighttype//theseareallvalidcombination

c++ - gcc vs clang 在具有可变参数和相同类型的额外参数的部分特化上的行为

以下代码:#includetemplatestructA{};templatestructA{};intmain(){Aa0;Aa2;return0;}...不编译g++(版本5.1.0和5.3.0)由于:error:partialspecializationisnotmorespecializedthantheprimarytemplatebecauseitreplacesmultipleparameterswithapackexpansion...但使用clang编译.是否允许声明这样的部分特化?旁注:实际上,自A以来,特化是危险的两个编译器都无法编译(模板参数数量错误)。