草庐IT

is_constexpr_copiable

全部标签

c++ - clang 3.3 和 constexpr 约束

我正在用clang3.3编译一些代码,似乎可以用gcc4.8编译:原代码为:templatestructhelper{typedefvoidtype;};templatestructhelper{typedefint64_ttype;};templatestructhelper{typedefint32_ttype;};templatestructhelper{typedefint16_ttype;};templatestructhelper{typedefint8_ttype;};templatestructtest{typedeftypenamehelper::typevalue_

c++ - constexpr 计算量的实际限制

作为实验,我只是将一些代码放在一起生成一个std::array在编译时。表内容本身是一个相当典型的CRC查找表-唯一的新事物是使用constexpr计算条目的函数,而不是将自动生成的魔法表直接放在源代码中。无论如何,这个练习让我感到好奇:编译器愿意为评估constexpr计算的计算量是否有任何实际限制?编译时的函数或变量定义?例如类似于gcc的-ftemplate-depth参数创建对模板元编程评估量的实际限制。(我还想知道参数包的长度是否存在实际限制-这会限制使用std::array中间对象创建的编译时std::integer_sequence的大小。)

c++ - GCC 错误 - 在 constexpr 中输入/递减数组访问

我在GCC6和7(不在GCC5)中的constexpr函数中发现了一个错误,如果函数在编译时(错误结果)或运行时(正确结果)求值,这会导致不同的结果。#includeconstexprintbar(int*b){inti=0;b[i++]=1;//GCCproducehereanfailure.return0;}constexprintfoo(){inttmp[]={0};bar(tmp);returntmp[0];}constexprintcexprI=foo();intmain(){std::coutLiveExample问题是数组访问内部的递增(也发生递减)操作。常量表达式的编译

c++ - 变量模板偏特化和 constexpr

我正在努力理解模板,特别是变量模板。考虑一下:templateconstintgcd1=gcd1;templateconstintgcd1=M;std::cout它打印出错误的0。但是,如果我使用constexpr而不是上面的const,我会得到正确的答案3。我再次使用结构模板得到正确答案:templatestructgcd2{staticconstintvalue=gcd2::value;};templatestructgcd2{staticconstintvalue=M;};std::cout::value我做错了什么?编辑:gcd1也可以在没有基本案例特化的情况下正常编译。怎么会

c++ - 无法声明静态 constexpr char []

我已经阅读了与此问题相关的所有答案,但老实说,我不确定我是否完全理解该解决方案。我正在使用C++11。假设我真的很想声明类似staticconstexprcharvalue[]="foo"的东西.如果我使用NetBeans/TDM_MINGW,我会收到一个错误,我认为这是一个链接错误,报告未定义对“variable_name”的引用。在MSVS2015中尝试相同的代码,我得到“表达式未计算为常量”。一个简单的staticconstexprchar*解决了问题,但我失去了使用像sizeof这样的表达式的能力.简单直接的问题(如果可能直接回答):有没有办法声明一个staticconstex

Mysql连接本地报错:1130-host ... is not allowed to connect to this MySQL server如何处理

右击开始图标,打开“命令提示符(管理员)”。1、输入代码,停止服务。 netstopMySQL57     //我的MySQL是57版本的2、转到mysql的bin目录下。3、输入代码,启动mysql跳过权限。mysqld--skip-grant-tables//执行到这里就只会有光标在一闪一闪无法继续写命令或输入任何命令,故重新再打开一个cmd窗口4、再打开一个CMD,再次转到mysql的根目录下  5、输入代码,进入mysql。mysql 6、输入代码,刷新数据库。flushprivileges; 7、输入代码,使用mysql数据库。 usemysql  //可以看到user表 8、输入代

c++ - 为什么这段代码会出现 "exception spec is more lax than base"错误?

尝试使用Xcode6.1中的clang版本(基于LLVM3.5svn的clang-600.0.54)编译以下代码,使用-std=c++11和-stdlib=libc++给我一些我不太明白的错误。#includestructImpl{typedefstd::functionL;Ll;inti;};structHndl{Impl*impl;Hndl(Impl*i):impl(i){}~Hndl()noexcept(false){}};intmain(intargc,char*argv[]){Hndlh(newImpl());h.impl->l=[=]{h.impl->i=42;};retu

c++ - ODR 使用转发的 constexpr 参数?

在下面...structC{};constexprCc;voidg(C);templatevoidf(T&&t){g(std::forward(t));}intmain(){f(c);}是否使用了codr?为什么/为什么不? 最佳答案 执行与inRichard'sanswer相同的Action,我们发现not被odr-used的第二个条件被违反,因此cisodr-used。详细的条件是:[Avariablexisodr-usedbyanexpressionexunlessxisanobjectand]exisanelementoft

c++ - constexpr c 字符串连接,在 constexpr 上下文中使用的参数

我正在探索我可以从这个答案中采用constexprcharconst*连接多远:constexprtoconcatenatetwoormorecharstrings我有以下用户代码,它准确地显示了我正在尝试做的事情。编译器似乎看不到函数参数(a和b)作为constexpr传入。任何人都可以找到一种方法使我在下面指出的两个不起作用,但实际上可以起作用吗?如果能够通过这样的函数组合字符数组,将会非常方便。templateconstexprautotest1(Aa,Bb){returnconcat(a,b);}constexprautotest2(charconst*a,charconst*

c++ - SFINAE std::isfinite 和使用 std::is_arithmetic 的类似函数

我在将一些代码从VS2013移植到GGC4.9和Clang3.5(使用libc++)时遇到了编译失败。代码的要点是#includestructFoo{operatordouble()const{return(101.0);}//Implicitconversiontodouble};intmain(int,char**){Foofoo;std::exp(foo);//Compilesstd::isfinite(foo);//Doesnotreturn(0);}我相信isfinite调用无法编译,因为cmath中的isfinite函数的返回类型声明为:typenamestd::enabl