草庐IT

c++ - Clang 无法从基类中找到 const 模板成员函数

以下C++文件:structBase{templatevoidf(T&&)const{}};structDerived:Base{templatevoidf(T&&)const{}usingBase::f;};intmain(){Derivedconstcd;cd.f('x');}用GCC编译得很好,但用Clang编译不好:$g++-7.3.0-std=c++11test.cpp-otest-Wall-Wextra$g++-7.2.0-std=c++11test.cpp-otest-Wall-Wextra$g++-6.4.0-std=c++11test.cpp-otest-Wall-W

c++ - 如何使用 Boost 实现测试套件和用例的组织?

前言我是单元测试的新手,也是C++的新手。最近我有一些使用RSpec在Ruby中进行测试驱动开发的经验。现在,我正在尝试使用Boost的单元测试框架在C++中进行类似的工作。场景我正在项目根文件夹下的目录/src中组织应用程序的头文件和源文件。正如我在其他C++程序中多次看到的那样,将测试放在项目根目录的目录/tests中似乎是合理的。现在我想在测试中复制源文件的目录结构。因此,假设我有以下源/头文件结构:/src/controllercontroller_class.hcontroller_class.cpp/modelmodel_a.hmodel_a.cppmodel_b.hmod

c++ - 相互竞争的原子操作会互相饿死吗?

想象一个有两个线程的程序。他们正在运行以下代码(CAS指的是CompareandSwap)://Visibletoboththreadsstaticinttest;//RunbythreadAvoidfoo(){//Checkifvalueis'test'andswapin0xdeadbeefwhile(!CAS(&test,test,0xdeadbeef)){}}//RunbythreadBvoidbar(){while(1){//Perpetuallyatomicallywriterand()intothetestvariableatomic_write(&test,rand())

c++ - 具有不完整值类型的映射

我遇到以下错误:classTest{std::maptest;};错误是“字段的类型不完整‘Test’”。我阅读了一些主题,建议这可能是xcode附带的libcxx版本中的错误,但如果我只需将其更改为:classTest{std::map>test;};我只是想仔细检查这绝对是一个正确的错误,而不是一个错误。干杯! 最佳答案 标准要求,除非另有说明,否则标准库模板组件中使用的所有类型都必须是完整的。因此libc++的错误是正确的。使用不完整类型是未定义的行为(§17.6.4.8[res.on.functions]/2),因此libs

c++ - 如何设置 GMock EXPECT_CALL 为模拟函数调用两个不同的函数

如何在“测试套件”中的测试函数中调用模拟函数时调用两个不同的函数?详细信息:模拟函数在测试函数中被调用两次。第一次调用时,它应该调用一个函数(测试套件中的本地函数),第二次调用时,它应该调用另一个函数(测试套件中的另一个本地函数)。那么,如何为上述需求设置EXPECT_Call为“Invoke”呢? 最佳答案 你应该使用WillOnce。像这样的(未经测试):structA{MOCK_METHOD0(foo,void());};classA_Test:public::testing::Test{Aa;voidbar1(){}void

c++ - C++ 单元测试的 Makefile

我正在努力编写正确构建我的单元测试的Makefile。例如,假设文件结构如下所示src/foo.cppsrc/foo.hppsrc/main.cpptests/test_foo.cpptests/test_all.cpp因此,要构建可执行文件test_all,我需要构建test_foo.o,它又依赖于test_foo.cpp,但也依赖于src/foo.o。在这种情况下,最佳做法是什么?父文件夹中有一个Makefile?每个文件夹一个Makefile?如果是这样,我如何管理文件夹之间的依赖关系? 最佳答案 通常的做法是每个目录一个Ma

c++ - 使用 boost::test 进行内存泄漏检测

我尝试使用行号启用msvc内存泄漏检测,就像我发现的这个片段here:Detectedmemoryleaks!Dumpingobjects->C:\PROGRAMFILES\VISUALSTUDIO\MyProjects\leaktest\leaktest.cpp(20):{18}normalblockat0x00780E80,64byteslong.Data:CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDObjectdumpcomplete.我尝试设置预处理器定义_CRTDBG_MAP_ALLOC手动在项目属性中,但我只得到这个:Dumpingobjects->{1

c++ - 使用 Google Test 调试 C++ 项目时禁用异常处理

我有我的(nativeC++)DLL项目和基于GoogleTest的相应测试EXE项目。通过此EXE调试我的DLL时,GoogleTest会自动处理异常。因此,如果我的DLL在调试期间抛出未处理的异常,我希望看到来自VisualStudio的错误消息,其中调试session在代码导致异常后暂停。相反,我在gtest.cc中触发了断点。如果我禁用--gtest_break_on_failure标志,我将不会收到任何中断。我在Google测试文档中找不到这样的选项。我错过了吗?我不想在调试设置中检查不同异常的“抛出时中断”标志,因为我只对未处理的异常感兴趣。 最

c++ - ‘operator=’ 的模糊重载与 c++11 std::move and copy and swap idiom

我收到以下错误:[matt~]g++-std=c++11main.cpp-DCOPY_AND_SWAP&&./a.outmain.cpp:Infunction‘intmain(int,constchar*const*)’:main.cpp:101:24:error:ambiguousoverloadfor‘operator=’in‘move=std::move((*©))’main.cpp:101:24:note:candidatesare:main.cpp:39:7:note:Test&Test::operator=(Test)main.cpp:52:7:note:Test&

c++ - CMake:如何添加具有相对目录的 Boost.Test 用例?

我有一个使用CMake和Boost.Test的工作项目,其目录结构如下(请原谅ASCII艺术):+-proj|---CMakeLists.txt|---build|---test|\----dir1|\----foo.cpp//containsoneBOOST_AUTO_TEST_SUITEandseveralBOOST_AUTO_TEST_CASE||---bar.cpp//containsoneBOOST_AUTO_TEST_SUITEandseveralBOOST_AUTO_TEST_CASE\----dir2\----foo.cpp//containsoneBOOST_AUTO