尝试通过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>()]
      );

10-06 07:41