草庐IT

c++ - 模板模板部分特化仅适用于 -std=c++1z 和 g++

我发现下面这段代码:#include#includetemplatestructX:std::false_type{};templateclassY,typenameU>structX>:std::true_type{};intmain(){if(X())std::cout>())std::cout仅在使用-std=c++1z编译g++-7时打印correct。其他版本的g++、clang++或其他std标志无法产生正确的结果。这是当前实现的错误吗,这段代码不应该打印任何东西,或者是C++17中的某些更改使这段代码按我预期的方式工作? 最佳答案

c++ - G++ 编译器错误 - 此处首先需要合成方法

这是错误:Infileincludedfrom/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/ios:39,from/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/ostream:40,from/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/iostream:40,fromdate.h:15,fromdate.cpp:1

c++ - G++ 为未使用的模板特化生成代码?

在我正在处理的项目的一些序列化代码中,我有一个类型,其大小取决于编译器。为了解决这个问题,我决定使用模板特化,效果很好。一切都在编译时解决。代码看起来有点像这样(不是真正的代码,只是一个例子):templatevoidspecial_function(){std::coutvoidspecial_function(){std::coutvoidspecial_function(){std::cout();return0;}在我的32位系统上,执行上述程序输出dword,正如预期的那样。但这样做的重点是这样做而不只是做if(sizeof(int)==4){...}elseif...是我曾

c++ - 找到 g++ 使用的 STL header 的路径

我需要在std::vector的调试版本中查找一些东西,我不记得header的实际位置。这是在Windows上的MSYS下,这很棘手,因为你有/include,/mingw/include,/mingw/mingw32/include,/usr/include,我仍然找不到它们...我知道一种方法,就是这样写一个文件:#includeintmain(){return0;}然后$g++-Etemp.cpp|grepvector我们发现它在这里:/mingw/lib/gcc/mingw32/4.8.1/include/c++/vector但是有没有更快的方法呢?可以问一下吗g++不用这个技

c++ - 如何使用 g++ 静态链接除少数库之外的所有库?

我要求静态链接我的所有库,包括libstdc++、libc、pthread等。有一个omniorb库我想动态链接。目前我已经动态链接了所有的库。ldd显示以下内容linux-vdso.so.1=>(0x00007fff251ff000)libpthread.so.0=>/lib64/libpthread.so.0(0x00007f291cc47000)libomniDynamic4.so.1(0x00007f291c842000)libstdc++.so.6=>/usr/lib64/libstdc++.so.6(0x00007f291c536000)libm.so.6=>/lib64/

C++ (gcc/g++) 两个巨大的字符串数组需要很长时间才能编译

对于用C++编写的程序,我需要两个包含数据的巨大字符串数组。它们在头文件中定义如下:#includestaticconststringstrdataA[30000]={"thisisthefirstlineofthedata","thesecondlineofdata","otherstuffinthethirdline",下降到"lastline."};//secondarraystringsstaticconststringstrdataB[60000]={"thisisthefirstlineofthedata","thesecondlineofdata","otherstuff

c++ - 用 g++ 编译 FLTK

我正在使用C++学习Stroustrup的原则和实践。我正在尝试编译以下程序。#include#include#includeintmain(){Fl_Windowwindow(200,200,"Windowtitle");Fl_Boxbox(0,0,200,200,"Hey,Imean,Hello,World!");window.show();returnFl::run();}我尝试用g++-std=c++11trial.cpp-otrial编译它,但它抛出了以下错误/tmp/ccaLRS7L.o:Infunction`main':trial.cpp:(.text+0x26):und

c++ - 为什么这段代码不能在 g++ 中编译

下面给出的示例代码不是用g++编译的。但它在VisualStudio工作。是否可以在g++的模板类中使用模板成员函数classImpl{public:templatevoidFoo(I*i){}};templateclassD{public:Cc;voidBar(){intt=0;c.Foo(&t);}};intmain(){Dd;d.Bar();return0;} 最佳答案 因为有问题的语句依赖于模板参数,编译器不允许内省(introspection)C直到实例化。你必须告诉它你的意思是一个函数模板:c.templateFoo(&

c++ - g++ 比使用列表的 visual studio 慢 1000 倍?

考虑以下代码片段:#include#include#include#includeusingnamespacestd;#defineNUM_ITER100000intmain(){clock_tt=clock();std::listmy_list;std::vector::iterator>list_ptr;list_ptr.reserve(NUM_ITER);for(inti=0;i0){my_list.erase(list_ptr[list_ptr.size()-1]);list_ptr.pop_back();}cout当我使用visualstudio编译并运行它时,启用了所有优化

c++ - 当我更改 g++ 参数的顺序时,为什么我的程序无法链接?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whydoestheorderof'-l'optioningccmatter?我开始学习Boost单元测试框架。我有一个最小的测试套件:#defineBOOST_TEST_MAIN#defineBOOST_TEST_DYN_LINK#includeBOOST_AUTO_TEST_CASE(test1){BOOST_CHECK(2==1);}首先我编译源码:g++-csrc/tests.cc-osrc/tests.o这完成没有错误。然后我可以链接如下:g++-otestssrc/tests.o-lboost_u