代码之家  ›  专栏  ›  技术社区  ›  bradgonesurfing

这个使用decltype和declval的c++typedef应该如何编写以使其可移植?

  •  2
  • bradgonesurfing  · 技术社区  · 7 年前

    我有以下几点

    template <typename F, typename A0>
    struct ResultOf {
            typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type;
    };
    

    它是这样写的,VS2010可以有一个 结果

    error: expected nested-name-specifier before ‘decltype’
    typedef typename decltype(boost::declval<F>()(boost::declval<A0>())) Type;
    

    这里有明显的小问题吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Evg    7 年前

    typename 这里不需要关键字。它特别用于表示依赖类型,如 T::value_type value_type 是一种类型。本例中没有依赖类型。

        2
  •  2
  •   xaxxon    7 年前

    typename 在clang、gcc和现代msvc中工作:

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