Можете ли вы объяснить, почему это печатает 1
? Не следует BOOST_TYPEOF
вернуть const int
, Как можно проверить, возвращает ли функция const
без использования функций C ++ 11?
#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;
}
Если выражение prvalue имеет тип резюме int
этот cv-квалификатор игнорируется. [Выражение] / 6:
Если prvalue изначально имеет тип «резюме
T
,» гдеT
это
cv-неквалифицированный некласс, тип не массив, тип выражения
настроен наT
до дальнейшего анализа.
Таким образом, макрос никогда не получает информацию о том, что тип возвращаемого значения был const
,
Возможное решение:
#include <boost/type_traits/function_traits.hpp>
// […]
typedef boost::function_traits<BOOST_TYPEOF(f_const_int)>::result_type type;