On 04/14/2016 10:10 AM, Mathias Gaunard wrote:
On 14 April 2016 at 14:43, Frank Winter <fwin...@jlab.org
<mailto:fwin...@jlab.org>> wrote:
Hi all!
Suppose you'd want to implement a simple EDSL (Embedded Domain
Specific Language) with Boost.proto with the following requirements:
Custom class 'Vector' as terminal
Classes derived from 'Vector' are working terminals too, e.g.
Vector10
[...]
template<typename T>
struct IsVector
: mpl::false_
{};
template<>
struct IsVector< Vector >
: mpl::true_
{};
Surely this should be true for all types derived from Vector.
template<typename T, typename Enable = void>
struct IsVector
: mpl::false_
{};
template<typename T>
struct IsVector<T, typanem enable_if< is_base_of<Vector, T> >::type>
: mpl::true_
{};
I had tried this
template<>
struct IsVector< Vector10 >
: mpl::true_
{};
before. Same error message. Now I tried the base_of implementation
template<typename T, typename Enable = void >
struct IsVector
: mpl::false_
{};
template<typename T>
struct IsVector<T , typename std::enable_if< std::is_base_of<Vector,
T>::value >::type>
: mpl::true_
{};
and still, I get basically the same error message:
/home/fwinter/src/boost_1_60_0/boost/proto/context/default.hpp:121:41:
error: no match for ‘operator+’ (operand types are ‘Vector10’ and
‘Vector10’)
BOOST_PROTO_BINARY_DEFAULT_EVAL(+, proto::tag::plus, make, make)
It's weird since the operator+ should be there for Vector, and since I
am importing the namespace VectorOps, it should work for derived
classes. I don't see why it's not working.
Thanks,
Frank
_______________________________________________
proto mailing list
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto
_______________________________________________
proto mailing list
proto@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/proto