|
Boost : |
Subject: Re: [boost] How to detect if f() returns void or not?
From: Maxime van Noppen (maxime_at_[hidden])
Date: 2009-12-12 11:27:29
joel falcou wrote:
> I fear you must resort to BOOST_TYPEOF.
The problem is that you cannot use BOOST_TYPEOF with void expressions it
seems. Here is what his code expands in :
--------------------------------------------------------------------
namespace boost { namespace type_of {
template<typename T>
typename enable_if<is_function<T>, T&>::type
ensure_obj(T&);
template<typename T>
typename disable_if<is_function<T>, T&>::type
ensure_obj(const T&);
}}
void returns_void();
int returns_int();
int main() {
std::cout<<std::boolalpha;
std::cout<<boost::is_void< __typeof__(boost::type_of::ensure_obj(void))
>::value<<'\n';
return 0;
}
--------------------------------------------------------------------
The ensure_obj expansion fails because T cannot be void.
-- Maxime
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk