草庐IT

assert_false

全部标签

c++ - 关于 ints 和 static_assert 的特化

我想编写一个仅适用于2个数字(例如3和5)的模板函数,如果您尝试将其与其他数字一起使用,则会出现错误。我可以这样做:templatevoidf();templatevoidf(){cout()\n";}templatevoidf(){cout()\n";}然后我可以用正常的方式调用这个函数:f();f();它编译得很好,如果我尝试错误地使用我的函数:f();编译器给我一个错误。这种方法有两个问题:1.-这是标准吗?我可以使用整数专门化模板吗?2.-我不喜欢使用这种方法时出现的错误,因为错误不会告诉用户他做错了什么。我更喜欢写这样的东西:templatevoidf(){static_as

c++ - 构造函数的初始化列表之前的 static_assert

有一个非模板化的类,它有一个模板化的构造函数。是否可以在此类构造函数中初始化成员变量之前检查静态断言?​​例如,下面的代码在检查T是否有这样的方法之前执行T::value()。classMyClass{public:templateMyClass(constT&t):m_value(t.value()){static_assert(HasValueMethod::value,"Tmusthaveavalue()method");}private:intm_value;};将static_assert放在构造函数的主体中工作正常,除了它在最后打印“Tmusthaveavalue()met

c++ - boost::call_traits - 为什么 gcc 为此给出 false?

示例:#include#include#includeboost::call_traits::param_typef(){return1;}intmain(){std::cout::param_type>::value::value问题:除非我做错了什么,我想我应该为两者都得到true,但是gcc4.7.0为后者输出false。有什么我想念的吗? 最佳答案 非类类型的右值永远不是const限定的。只有类类型的右值可以是const限定的。因此,即使函数f被声明为返回一个constint,即使函数f的类型是constint(),调用表达

C++ rapidjson:GenericValue::IsNull 在任何情况下都返回 false

在检测到我们项目中的一个神秘问题后,我仍然感到震惊。我们意识到调用HasMember("string")正在执行额外的查找。因此,出于性能原因,我们对其进行了更改。主要思想是:而不是调用HasMember然后像这样预缓存引用:rapidjson::Documentd;d.Parse(json);if(d.HasMember("foo")){constrapidjson::Value&fooValue=d["foo"];//dosomethingwithfooValue}更改为:rapidjson::Documentd;d.Parse(json);constrapidjson::Valu

c++ - 应该用 typedef 触发 static_assert 吗?

我注意到当实例化为typedef时,类模板中的静态断言不会被触发。#includetemplatestructtest_assert{static_assert(std::is_same::value,"shouldfail");};typedeftest_assertt;这段代码编译没有错误。如果我尝试创建一个实例,则断言失败:tobj;//error:staticassertionfailed:"shouldfail"最后,如果我将条件替换为false,即使我不实例化类模板,断言也会失败:templatestructtest_assert{static_assert(false,"

c++ - 派生类中的析构函数标记为 noexcept(false)

有如下代码:classMember{public:~Member()noexcept(false){}};classA{public:virtual~A(){}};classB:publicA{public:Memberm;};错误是:main.cpp:13:7:error:looserthrowspecifierfor‘virtualB::~B()noexcept(false)’classB:publicA^main.cpp:10:11:error:overriding‘virtualA::~A()noexcept’virtual~A(){}^为什么B类中的析构函数被标记为noexc

c++ - 任何类型的 unique_ptr 的 static_assert

我如何静态断言表达式是std::unique_ptr即std::unique_ptr对于任何T.static_assert(std::is_pointer()),"notasmartpointer")以上无效。如果没有什么直截了当的,我只对bool()感兴趣运算符是为类型定义的。 最佳答案 通过适当的部分特化创建您自己的特征:templatestructis_unique_ptr:std::false_type{};templatestructis_unique_ptr>:std::true_type{};

c++ - isalpha(<mychar>) == true 计算结果为 false?

stringtemp等于来self的调试器的“ZERO:\t.WORD\t1”。(我文件的第一行)stringtemp=RemoveWhiteSpace(data);inti=0;if(temp.length()>0&&isalpha(temp[0]))cout0&&isalpha(temp[0])==true)cout这是我的代码,用于检查temp的第一个字符是否为a-z、A-Z。第一个if语句将评估为true,第二个if语句将评估为false。为什么?!?!?!即使没有“temp.length()>0&&”,我也试过了,它仍然评估为false。它只是讨厌“==true”。我唯一能想

c++ - std::logic_error 而不是返回 false

我正在寻找某人对std::logic_error用法的意见,而不是使用复杂的嵌套if/elseif列表返回true/false。我想从很多类似的函数中移动,如下面的函数boolvalidate_data(){std::vectorv;//fillwithdataif(v.find(10)==v.end()){returnfalse;}//otherchecksthatreturnfalse}到boolvalidate_data(){std::vectorv;//fillwithdataif(v.find(10)==v.end()){throwstd::logic_error("erro

c++ - 比较两个具有相同值的 TCHAR 结果为 false

我正在尝试检查我的应用程序路径,如果它不是指定路径,则移动它。我觉得我的代码很可靠,但它不能正常工作。TCHARpCheck[MAX_PATH];TCHARxPath[MAX_PATH];GetModuleFileName(NULL,xPath,MAX_PATH);if(SHGetSpecialFolderPath(HWND_DESKTOP,pCheck,CSIDL_DESKTOP,FALSE)){wcscat(pCheck,L"\\NewFile.exe");MessageBox(NULL,pCheck,NULL,NULL);MessageBox(NULL,xPath,NULL,NU