如何使用CdType和DECVALL编写C++的Type?

如何使用CdType和DECVALL编写C++的Type?,c++,gcc,boost,decltype,declval,C++,Gcc,Boost,Decltype,Declval,我有以下几点 template <typename F, typename A0> struct ResultOf { typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type; }; 它的编写是为了让VS2010能够产生一个结果,该结果适用于特定的用例。它在vs2015、vs2013和vs2010下工作,但在gcc下我得到一个编译错误 error: e

我有以下几点

template <typename F, typename A0>
struct ResultOf {
        typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type;
};
它的编写是为了让VS2010能够产生一个结果,该结果适用于特定的用例。它在vs2015、vs2013和vs2010下工作,但在gcc下我得到一个编译错误

error: expected nested-name-specifier before ‘decltype’
typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type;
这里有明显的小问题吗?

这里不需要typename关键字。当编译器无法知道value\u type是否为类型时,它尤其用于表示依赖类型,如T::value\u type。本例中没有依赖类型。

删除typename适用于clang、gcc和现代msvc:


它需要多便携?旧的VS是一个完全不同的野兽,很难被称为C++为什么要使用std decltype,而要使用boost declval?VS2010到VS2017和gcc。