草庐IT

assert_eq

全部标签

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,"

【EQ-R】使用EQ-Renderer实现AR桌面

EQ-R简介EQ-Renderer是EQ基于sceneform(filament)扩展的一个用于安卓端的三维AR渲染器。主要功能它包含sceneform_v1.16.0中九成接口(剔除了如sfb资源加载等已弃用的内容),扩展了视频背景视图、解决了sceneform模型加载的内存泄漏问题、集成了AREngine和ORB-SLAM3、添加了场景坐标与地理坐标系(CGCS-2000)的转换方法。注:由于精力有限,文档和示例都不完善。sceneform相关请直接参考谷歌官方文档,扩展部分接口说明请移步git联系。相关链接Git仓库EQ-Renderer的示例工程码云EQ-Renderer的示例工程EQ

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++ - "not, and, or, not_eq.."是 C++ 标准的一部分吗? (以及为什么可以在代码中使用或避免使用它们?)

所以它看起来像所有这些:http://www.cplusplus.com/reference/clibrary/ciso646/是c++中的关键字。我的问题是。这是c++标准的一部分吗?我可以依赖主要编译器的支持吗?我知道gcc确实支持这些关键字。最后,也许这更像是一个偏好或风格问题,但与标准运算符(!、!=、&&...等)相比,使用关键字是否有任何优势? 最佳答案 Myquestionis.Isthisapartofthec++standard?是的。CanIrelyonthistobesupportedbymajorcompil

c++ - 使用 static_assert 检查 Q_OBJECT 宏

如果我得到的类型声明不包含Q_OBJECT宏,我有一些有趣的需要显示编译错误。我发现了一种不好的方法。实际上它重复了Qt开发人员的想法来做同样的事情:templatevoidcheckForQObjectMacro(){reinterpret_cast(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast(0));}这很好用,但确实给出了奇怪的错误消息。我想显示一条可读的消息。一种方法是使用static_assert构造。但我不知道如何实现Q_OBJECT宏存在的静态验证条件。也许有人可以提出一个漂亮的黑客?也非常感谢任何想法。

c++ - openCV 错误 : Assertion failed (scn == 3 || scn == 4) on Raspberry Pi

我关注了thistutorialOpenCV对象跟踪并设法使代码在我的笔记本电脑上运行,无论是在使用VisualStudio的Windows上还是在我的UbuntuVM(使用CMake)上。现在我尝试在我的RaspberryPi(运行Raspbian)上运行它。cmake.和make命令似乎工作正常但是当我尝试运行可执行文件时出现以下错误:pi@raspberrypi~/Desktop/Track$./TrackObjinitdoneopenglsupportavailableOpenCVError:Assertionfailed((scn==3||scn==4)&&(depth==C

c++ - 如果函数被称为 constexpr,则有条件地 static_assert

我知道有人提议使用constexpr()运算符,但这还没有在gcc/clang中实现。我也知道有一个使用机器代码编辑等技巧的实现:http://saadahmad.ca/detecting-evaluation-context-inside-constexpr-functions/我想知道是否有一个有点受限的解决方案:structF{constexprF(intv){ifconstexpr(constexpr()){static_assert(v>0);}else{assert(v>0);}}};//...constexprFf{0};//shouldtriggeracompile-t

c++ - CUDA : NVCC gives controlling expression is constant warning on assert

我在这样的断言语句中收到警告controllingexpressionisconstant:assert(...&&"errormessage");为什么要对这个断言发出警告?我怎样才能抑制这个警告?NVCC是NVIDIA的cuda编译器,我觉得是基于LLVM的。为什么它会发出此警告,而GCC或VisualC++编译器可以正常编译? 最佳答案 可移植的替代方案(可能包含在宏中)类似于:{constboolerror_message=true;assert([...]&&error_message);}澄清我的意思:#definemy

c++ - static_assert 不会立即中断编译

代码示例:templatestructSUM{static_assert(x>=0,"Xmustbegreaterorequalto0");enum{VALUE=x+SUM::VALUE};};templatestructSUM{enum{VALUE=0};};intmain(){std::cout::VALUE为什么编译器不会在第一个static_assert时中断编译,而是继续工作直到达到最大实例化深度?Invoking:GCCC++Compilerg++-O0-g3-Wall-c-fmessage-length=0-std=c++11-MMD-MP-MF"src/Main.d"-

c++ - 在 C++ 中检测运算符是否存在和可调用(考虑 static_asserts)

给定2种类型T和U我想检测是否可以调用operator*在对象之间(即是否可以写t*u,其中t是T类型,u是U类型)我正在使用c++detectionidiom但由于它在我的编译器中还不可用,所以我自己实现了它structnonesuch{nonesuch()=delete;~nonesuch()=delete;nonesuch(nonesuchconst&)=delete;voidoperator=(nonesuchconst&)=delete;};namespacedetail{templateclassOp,class...Args>structdetector{usingval