如何使用decltype和declval编写此c ++ typedef以使其可移植?

时间:2018-10-16 07:50:57

标签: c++ gcc boost decltype declval

我有以下

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;

这里是否有明显的小解决方案?

2 个答案:

答案 0 :(得分:2)

此处不需要

typename关键字。当编译器无法确定T::value_type是否为类型时,它尤其用于表示从属类型,例如value_type。当前没有依赖类型。

答案 1 :(得分:2)

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

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