草庐IT

decltype-auto

全部标签

c++ - 原型(prototype)与 decltype 和 auto 不匹配

考虑以下类:classMyClass{int_id;public:decltype(_id)getId();};decltype(MyClass::_id)MyClass::getId(){return_id;}它编译得很好。但是,当我用它制作模板类时:templateclassMyClass{int_id;public:decltype(_id)getId();};templatedecltype(MyClass::_id)MyClass::getId(){return_id;}我明白了:test.cpp:10:27:error:prototypefor'decltype(MyCla

c++ - 原型(prototype)与 decltype 和 auto 不匹配

考虑以下类:classMyClass{int_id;public:decltype(_id)getId();};decltype(MyClass::_id)MyClass::getId(){return_id;}它编译得很好。但是,当我用它制作模板类时:templateclassMyClass{int_id;public:decltype(_id)getId();};templatedecltype(MyClass::_id)MyClass::getId(){return_id;}我明白了:test.cpp:10:27:error:prototypefor'decltype(MyCla

ABI 错位名称中的 C++ 模板参数依赖 decltype

考虑以下函数:templateautoMin(A&&a,B&&b)->decltype(a(a):std::forward(b)){returna(a):std::forward(b);}片段Min(0,1)导致模板被实例化为Min.奇怪的是,Min的错误名称我的代码使用g++和clang是_Z3MinIiiEDTqultfp_fp0_cl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOS0_OS1_(又名:decltype(({parm#1})({parm#1})):((forward)({parm#2})))Min(int&&,int&&))。换句话说,

ABI 错位名称中的 C++ 模板参数依赖 decltype

考虑以下函数:templateautoMin(A&&a,B&&b)->decltype(a(a):std::forward(b)){returna(a):std::forward(b);}片段Min(0,1)导致模板被实例化为Min.奇怪的是,Min的错误名称我的代码使用g++和clang是_Z3MinIiiEDTqultfp_fp0_cl7forwardIT_Efp_Ecl7forwardIT0_Efp0_EEOS0_OS1_(又名:decltype(({parm#1})({parm#1})):((forward)({parm#2})))Min(int&&,int&&))。换句话说,

c++ - 在 C++11 中使用 decltype() 时出错(在 gcc 4.7.0 中创建不透明的错误消息)

使用以下代码(我的原始代码的简化版本)#include#includetemplateclassA;//edit1followingMark&MatthieutemplateclassA{Xa;templatefriendclassA;//edit1followingMark&Matthieupublic:A(Xx):a(x){}Xget()const{returna;}//edit2toavoidusingA::atemplateautodiff(Aconst&y)const->decltype(a-y.a)//originalcodecausingerrorwithgcc->typ

c++ - 在 C++11 中使用 decltype() 时出错(在 gcc 4.7.0 中创建不透明的错误消息)

使用以下代码(我的原始代码的简化版本)#include#includetemplateclassA;//edit1followingMark&MatthieutemplateclassA{Xa;templatefriendclassA;//edit1followingMark&Matthieupublic:A(Xx):a(x){}Xget()const{returna;}//edit2toavoidusingA::atemplateautodiff(Aconst&y)const->decltype(a-y.a)//originalcodecausingerrorwithgcc->typ

c++ - result_of<F(Args...> 和 decltype<f(args...)> 有什么区别?

我看到std::async指定如下:template//copiedoutofthestandardfuture::type>async(F&&f,Args&&...args);我原以为它会这样声明:templateautoasync(F&&f,Args&&...args)->future(f)(forward(args)...)>;这是否是等价的,或者是否有某种方式使用result_of比使用decltype更可取?(我知道result_of适用于类型,而decltype适用于表达式。) 最佳答案 您的版本不适用于例如指向成员的指

c++ - result_of<F(Args...> 和 decltype<f(args...)> 有什么区别?

我看到std::async指定如下:template//copiedoutofthestandardfuture::type>async(F&&f,Args&&...args);我原以为它会这样声明:templateautoasync(F&&f,Args&&...args)->future(f)(forward(args)...)>;这是否是等价的,或者是否有某种方式使用result_of比使用decltype更可取?(我知道result_of适用于类型,而decltype适用于表达式。) 最佳答案 您的版本不适用于例如指向成员的指

c++ - 使用 decltype/SFINAE 检测运算符(operator)支持

一个(有点)过时的article探索使用方法decltype与SFINAE一起检测类型是否支持某些运算符,例如==或.这是检测类是否支持的示例代码运营商:templatestructsupports_less_than{staticautoless_than_test(constT*t)->decltype(*tless_than_test(...){}staticconstboolvalue=(sizeof(less_than_test((T*)0))==1);};intmain(){std::cout::value这会输出true,因为当然std::string支持运算符(oper

c++ - 使用 decltype/SFINAE 检测运算符(operator)支持

一个(有点)过时的article探索使用方法decltype与SFINAE一起检测类型是否支持某些运算符,例如==或.这是检测类是否支持的示例代码运营商:templatestructsupports_less_than{staticautoless_than_test(constT*t)->decltype(*tless_than_test(...){}staticconstboolvalue=(sizeof(less_than_test((T*)0))==1);};intmain(){std::cout::value这会输出true,因为当然std::string支持运算符(oper