BOOST_TYPEOF возвращает int вместо const int

Можете ли вы объяснить, почему это печатает 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;
}

4

Решение

Если выражение 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;

демонстрация.

4

Другие решения


По вопросам рекламы [email protected]