c++ - Xcode:错误:函数样式强制转换或类型构造的预期 '('

标签 c++ xcode macos decltype

尝试通过xcode编译以下代码时出现此错误。 Windows上的Visual Studio可以毫无问题地对其进行编译。

template <typename OutT, typename MayaArrayT>
void DumpMayaArray(std::vector<OutT>& out, const MayaArrayT& source)
{
    using MayaElementT = decltype(MayaArrayT()[unsigned int()]); // error happens in this line!
    static_assert(std::is_same<MayaElementT, OutT&>::value, "array type mismatch");

该代码段应该做的是从::operator[]( unsigned int index );的return-type获取MayaArrayT元素的类型。
可悲的是,没有其他方法可以获取MayaArrayT的元素类型。

最佳答案

decltype中的代码实际上是对MayaArrayT::operator(unsigned int)的调用。但是,实际上并未评估decltype的参数,因此您需要假装正在进行调用,如下所示:

using MayaElementT = decltype(
        std::declval<MayaArrayT&>()[std::declval<unsigned int>()]
      ); 

关于c++ - Xcode:错误:函数样式强制转换或类型构造的预期 '(',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61371347/

相关文章:

objective-c - 从 NSOutlineView 中去除几个级别的缩进

c++ - 根据模板的类型名设置私有(private)属性

c++ - 用户空间中的内存障碍? (Linux,x86-64)

c++ - Ncurses - "move"及其衍生物删除屏幕内容

iphone - 是否可以抑制特定任务的编译器警告?

ios - 将 View 动画化到 collectionView 中的选定单元格或 scrollView 中的 tableView

objective-c - IOS:国家代码

c# - 当 UWP 解决方案包含 Windows 运行时组件 (C#) 时 WACK 失败

swift - 匹配 AppKit 和 SpriteKit 颜色

linux - 如何增加 OS X 上的 Docker 基本卷大小?