草庐IT

c++ - g++ 6.1 可能的 std::forward 回归 - 错误或预期行为?

g++6.1最近被引入到ArchLinux的测试库中,我的一些使用g++5.3.0成功编译的代码不再编译。我做了一个最小的例子:gcc.godbolt.orglink//Thiscodecompileswithg++5.3.0//Thisdoesnotcompilewithg++6.1#include#include#include#defineFWD(...)::std::forward(__VA_ARGS__)structsinker{templatevoidsink(T&){}};templatevoidcaller(T&v,TF&&f){sinkers;f(s,v);}temp

Linux---(五)三大工具yum、vim、gcc/g++

文章目录一、yum工具1.Linux中安装软件的方法:2.什么是yum?3.yum源更新二、Linux编辑器--vim1.IDE例子2.vim(1)vim的常用模式及切换模式(2)底层模式常用命令(3)插入模式常用命令(4)视图模式常用命令(5)补充内容(6)vim的配置三、Linux编译器-gcc/g++的使用1.适用于什么语言2.快速查看(1)命令(2)注意点3.回忆一下,程序的翻译(1)须知(2)先有编译器还是先有语言?(3)程序的翻译过程一、yum工具1.Linux中安装软件的方法:(1)源代码安装(不推荐):把源代码编译,形成可执行,编译太麻烦(2)rpm软件包安装(不推荐):安装的

c++ - 为什么在我的计算机上没有 g++ 中的 -O2 时 sqrt 会变得更快?

考虑以下代码:#include#includeconstintCOUNT=1000000000;intmain(){doublesum=0;for(inti=1;i没有-O2,它在我的电脑上只运行2.9s,而使用-O2运行6.4s。我的电脑是Fedora23,g++5.3.1。我在Ubuntu14.04(使用g++4.8)上尝试过同样的事情,它没有问题(所有6.4s)。 最佳答案 原始版本使用调用glibcsqrt函数。优化版使用SSEsqrtsd指令。但是在指令完成后,它会检查结果值是否不是NaN。如果结果值为NaN,则它调用gl

c++ - 将左值绑定(bind)到右值引用——g++ 错误?

作为对anotherquestion的回答我想贴出下面的代码(也就是我想贴出基于这个思路的代码):#include#include//std::is_same,std::enable_ifusingnamespacestd;templatestructBoxed{Typevalue;templateBoxed(Argconst&v,typenameenable_if::value,Arg>::type*=0):value(v){wcoutv){}intmain(){inti=5;function(i);//但是,虽然MSVC11.0在最后一次调用时阻塞,但IHMO应该如此,而MinGW

c++ - 修复了 g++ 4.9.1 奇怪的 "%a"格式行为?

编译器:来自Nuwen发行版的64位MinGWG++4.9.1,在Windows8.1下。代码:#ifdefINCLUDE_IOSTREAM#include#endif#include//::snprintf#include//EXIT_SUCCESS,EXIT_FAILURE#include//std::exception#ifdefsnprintf#errorsnprintfdefinedasmacro#endif#ifdef_MSC_VERautoconstsnprintf=_snprintf;#endifvoidtest(doubleconstvalue,intconstpre

c++ - g++ 和 clang++ 自动参数模板特化的不同行为

使用C++17auto模板参数我遇到了另一个g++/clang++分歧。给定以下简单代码templatestructfoo;templatestructfoo{};intmain(){foof42;//我看到clang++(8.0.0,例如)编译g++(9.2.0,例如)给出以下错误的代码prog.cc:Infunction'intmain()':prog.cc:12:13:error:aggregate'foof42'hasincompletetypeandcannotbedefined12|foof42;|^~~如果我们使用int常量而不是long常量,两个编译器都会编译foof4

c++ - 如何使用 -g 调试标志编译 boost?

我想重新编译我们的boost库,但启用了-g调试标志。我一直在阅读并看到我们使用jam构建了boost。虽然我非常了解make,但jam一直让我望而却步,我的挫败感越来越大。 最佳答案 对不起。我知道回答你自己的问题是令人反感的,但我在发帖后不久就弄明白了。cxxflags和cflags属性是我需要使用的,如下所述:http://www.boost.org/boost-build2/doc/html/bbv2/overview/invocation.html在属性部分下。 关于c++-如

c++ - 如何强制 g++ 内联函数?

我最近在将HaskellFFI用于C/C++时遇到了C++内联函数的问题。即,g++并不真正内联声明为inline的函数,并为它们生成符号。最终,当ghci尝试加载调用内联函数的目标文件时,这会产生链接器错误:Loadingobject(static)solveeq.o...doneLoadingobject(dynamic)/usr/lib/gcc/x86_64-linux-gnu/4.6/libstdc++.so...donefinallink...ghc:solveeq.o:unknownsymbol`_ZN5Eigen8internal19throw_std_bad_alloc

c++ - cast 运算符函数在 g++ 中编译良好,但在其他编译器中则不然。为什么?

这个问题在这里已经有了答案:Operatorcast,GCCandclang:whichcompilerisright?(1个回答)关闭6年前。考虑以下程序:structS{usingT=float;operatorT(){return9.9f;}};intmain(){Sm;S::Tt=m;t=m.operatorT();//Isthiscorrect?}程序在g++中编译良好(参见现场演示here)但它在clang++、MSVC++和IntelC++编译器中编译失败clang++给出以下错误(参见现场演示here)main.cpp:8:20:error:unknowntypenam

c++ - g++ 可变参数模板问题

所以我把这个程序交给了g++和clang(都在Linux,x86_64上):#includeusingnamespacestd;templatestructA{staticconststrings;staticAa;~A(){coutconststringA::s={{Cs...}};templateAA::a;intmain(void){(void)A::a;return0;}Clang输出s=aaaaaaaaaaaaaaaa(正如预期的那样)。g++(版本5到8)输出s=s=aaaaaaaa(非常出乎意料)。如果您不使用可变参数模板(如果您删除所有代码并内联字符列表以初始化A::s