$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-users] Testing whether result_of<F(U)> is a valid expression
From: oswin krause (oswin.krause_at_[hidden])
Date: 2013-02-08 05:12:43
Hi,
Is it possible to evaluate, whether a certain argument type given to a 
functor will lead to a valid expression with the result_of template?
i am trying to achieve the following, maybe there is a better way to do it:
template<class T, class F>
Container< typename boost::result_of<F(T)>::type > transform(
     Container<T> c, F f,
     std::disable_if<valid_expression<F(Block<T>) > >::type* dummy = 0
){
    //slow default implementation
     Container<T> res(c.size());
     std::transform(c.begin(),c.end(),res.begin(),f):
     return res;
}
//blocked implmentation of transform
template<class T, class F>
Container< typename boost::result_of<F(T)>::type > transform(
     Container<T>, F functor,
     std::enable_if<valid_expression<F(Block<T>) > >::type* dummy = 0
){
//functor supports fast implementation
     Container<T> res(c.size());
std::transform(c.blocks().begin(),c.blocks().end(),res.blocks().begin(),functor): 
     return res;
}
the question is, how valid_expression<F(Block<T>) > could be implemented 
and right now the only mechanism which get's close to what i want would 
be checking result_of<F(Block<T>)> is valid.
Greetings,
Oswin