2

我有以下

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;

这里有明显的小修复吗?

4

2 回答 2

2

typename这里不需要关键字。它特别用于表示依赖类型,例如T::value_type,当编译器无法知道是否value_type是类型时。在本例中没有依赖类型。

于 2018-10-16T07:53:37.827 回答
2

删除typenameclang、gcc 和现代 msvc 中的作品:

https://godbolt.org/z/CfOw-_

于 2018-10-16T07:55:46.733 回答