这个使用 decltype 和 declval 的 c++ typedef 应该如何编写以使其可移植?
How should this c++ typedef using decltype and declval be written to make it portable?
我有以下
template <typename F, typename A0>
struct ResultOf {
typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type;
};
它的编写是为了让 VS2010 可以具有适用于特定用例的 result_of。它在 vs2015、vs2013 和 vs2010 下工作,但在 gcc 下我得到一个编译错误
error: expected nested-name-specifier before ‘decltype’
typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type;
这里有明显的小修复吗?
typename
这里不需要关键字。当编译器无法知道 value_type
是否是一种类型时,它特别用于表示依赖类型,如 T::value_type
。当前案例中没有依赖类型。
删除 typename
在 clang、gcc 和现代 msvc 中有效:
我有以下
template <typename F, typename A0>
struct ResultOf {
typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type;
};
它的编写是为了让 VS2010 可以具有适用于特定用例的 result_of。它在 vs2015、vs2013 和 vs2010 下工作,但在 gcc 下我得到一个编译错误
error: expected nested-name-specifier before ‘decltype’
typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type;
这里有明显的小修复吗?
typename
这里不需要关键字。当编译器无法知道 value_type
是否是一种类型时,它特别用于表示依赖类型,如 T::value_type
。当前案例中没有依赖类型。
删除 typename
在 clang、gcc 和现代 msvc 中有效: