BOOST_TYPEOF returns int 而不是 const int
BOOST_TYPEOF returns int instead of const int
你能解释一下为什么打印 1
吗?不应该BOOST_TYPEOF
returnconst 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.
你能解释一下为什么打印 1
吗?不应该BOOST_TYPEOF
returnconst 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
,” whereT
is a cv-unqualified non-class, non-array type, the type of the expression is adjusted toT
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.