BOOST_TYPEOF returns int 而不是 const int

BOOST_TYPEOF returns int instead of const int

你能解释一下为什么打印 1 吗?不应该BOOST_TYPEOFreturnconst int。如何在不使用 c++11 特性的情况下检查函数 returns const 是否存在?

#include <iostream>

#include <boost/typeof/typeof.hpp>
#include <boost/type_traits/is_same.hpp>

const int f_const_int() {return 1;}

int main()
{
    typedef BOOST_TYPEOF(f_const_int()) type;
    std::cout << (boost::is_same<type, int>::value) << std::endl;
}

如果纯右值表达式的类型为 cv int,则忽略该 cv 限定符。 [表达式]/6:

If a prvalue initially has the type “cv T,” where T is a cv-unqualified non-class, non-array type, the type of the expression is adjusted to T prior to any further analysis.

宏因此永远不会收到 return 类型是 const 的信息。
可能的解决方法:

#include <boost/type_traits/function_traits.hpp>

// […]
typedef boost::function_traits<BOOST_TYPEOF(f_const_int)>::result_type type;

Demo.