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

Reply via email to