Phoenix: is there a Phoenix expression trait?

Hi, I'm adding a convert_to Phoenix like functor to Boost.Conversion. I would like to use the same name, i.e. convert_to, but the overloads conflict. I would like to use sfinae to choose the correct overloading between template inline typename expression::convert_to, U>::type const convert_to(U const& u); template Target convert_to(Source const& from, boost::dummy::base_tag const& p=boost::dummy::base_tag()) Is there a trait that can be used to detect if the parameter is a Phoenix expression? BTW, I have just based my implementation on the one for static_cast, that uses the detail boost::phoenix::detail::target Could someone explain me why this is needed? Could this detail be moved to the user interface? Best, Vicente

On Sat, May 14, 2011 at 8:18 PM, Vicente BOTET <vicente.botet@wanadoo.fr> wrote:
Hi,
I'm adding a convert_to Phoenix like functor to Boost.Conversion.
I would like to use the same name, i.e. convert_to, but the overloads conflict. I would like to use sfinae to choose the correct overloading between
template inline typename expression::convert_to, U>::type const convert_to(U const& u);
template Target convert_to(Source const& from, boost::dummy::base_tag const& p=boost::dummy::base_tag())
Is there a trait that can be used to detect if the parameter is a Phoenix expression?
There is boost::phoenix::is_actor<T>.
BTW, I have just based my implementation on the one for static_cast, that uses the detail boost::phoenix::detail::target
Could someone explain me why this is needed?
This is a dummy type just holding the type information to what the expressions needs to be casted to. It's also used in construct and new_. It's use is that the target type gets "decoded" in the expression tree without the target being default instantiated. (Some target types don't have default construction).
Could this detail be moved to the user interface? It's really just a implementation detail ... I don't know.
Regards, Thomas

Thomas Heller-7 wrote:
On Sat, May 14, 2011 at 8:18 PM, Vicente BOTET <vicente.botet@wanadoo.fr> wrote:
Hi,
I'm adding a convert_to Phoenix like functor to Boost.Conversion.
I would like to use the same name, i.e. convert_to, but the overloads conflict. I would like to use sfinae to choose the correct overloading between
template inline typename expression::convert_to, U>::type const convert_to(U const& u);
template Target convert_to(Source const& from, boost::dummy::base_tag const& p=boost::dummy::base_tag())
Is there a trait that can be used to detect if the parameter is a Phoenix expression?
There is boost::phoenix::is_actor<T>.
I will try it.
BTW, I have just based my implementation on the one for static_cast, that uses the detail boost::phoenix::detail::target
Could someone explain me why this is needed?
This is a dummy type just holding the type information to what the expressions needs to be casted to. It's also used in construct and new_. It's use is that the target type gets "decoded" in the expression tree without the target being default instantiated. (Some target types don't have default construction).
Oh, I see. Thanks for the explanation.
Could this detail be moved to the user interface? It's really just a implementation detail ... I don't know.
Doesn't matter. It seems it plays the same role that the template classes dummy::base_tag/type_tag I included in Boost.Conversion to transport the Target type. I will use my dummy classes instead. Thanks, Vicente -- View this message in context: http://boost.2283326.n4.nabble.com/Phoenix-is-there-a-Phoenix-expression-tra... Sent from the Boost - Dev mailing list archive at Nabble.com.
participants (3)
-
Thomas Heller
-
Vicente Botet
-
Vicente BOTET