[mpl] std::integral_constant support?

The following reasonable-seeming use of mpl::plus doesn't compile: #include <utility> #include <boost/mpl/plus.hpp> typedef std::integral_constant<int, 1> one; typedef boost::mpl::plus<one, one>::type two; That's because mpl only works with its own integral constant wrappers, not the standard one. That seems unfortunate to me. Is there any interest in supporting this? Here's the error (from clang trunk with glibc++): 1> In file included from main.cpp:2: 1> In file included from /home/Eric/boost/org/trunk/boost/mpl/plus.hpp:19: 1> In file included from /home/Eric/boost/org/trunk/boost/mpl/aux_/arithmetic_op.hpp:34: 1> In file included from /home/Eric/boost/org/trunk/boost/mpl/aux_/include_preprocessed.hpp:37: 1> /home/Eric/boost/org/trunk/boost/mpl/aux_/preprocessed/gcc/plus.hpp:60:25: error: no type named 'tag' in 'std::integral_constant<int, 1>' 1> typedef typename T::tag type; 1> ~~~~~~~~~~~~^~~ 1> /home/Eric/boost/org/trunk/boost/mpl/aux_/preprocessed/gcc/plus.hpp:111:20: note: in instantiation of template class 'boost::mpl::plus_tag<std::integral_constant<int, 1> >' requested here 1> typename plus_tag<N1>::type 1> ^ -- Eric Niebler BoostPro Computing http://www.boostpro.com

Le 15/07/2012 19:24, Eric Niebler a écrit :
The following reasonable-seeming use of mpl::plus doesn't compile:
#include <utility> #include <boost/mpl/plus.hpp>
typedef std::integral_constant<int, 1> one; typedef boost::mpl::plus<one, one>::type two;
That's because mpl only works with its own integral constant wrappers, not the standard one. That seems unfortunate to me. Is there any interest in supporting this?
Here's the error (from clang trunk with glibc++):
This could be done by making all T::tag stuff in mpl us a tag_of<T>::type appraoch a la Fusion, we can then allow arbitrary types to model MPL Concepts. Now, in presence of std::integral_constant maybe mpl shoudl just do using std::integral_constant; in addition to the previous fix.
participants (2)
-
Eric Niebler
-
Joel Falcou