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