MA(3)

NAME
BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT - For exposing in classes that inherit from proto::extends<> the overloaded assignment operators defined therein. Unlike the BOOST_PROTO_EXTENDS_USING_ASSIGN() macro, BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT() is for use in non-dependent contexts.

SYNOPSIS

// In header: <boost/proto/extends.hpp>
BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT(Derived)

DESCRIPTION

The standard usage of proto::extends<> is to define a class template that inherits from it. The derived class template automatically gets a compiler-generated assignment operator that hides the ones defined in proto::extends<>. Using BOOST_PROTO_EXTENDS_USING_ASSIGN() in the derived class solves this problem.

However, if the expression extension is an ordinary class and not a class template, the usage of BOOST_PROTO_EXTENDS_USING_ASSIGN() is in a so-called non-dependent context. In plain English, it means it is illegal to use typename in some places where it is required in a class template. In those cases, you should use BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT() instead.

See also:

    &#8226; proto::extends<>.RE

        &#8226; BOOST_PROTO_EXTENDS_USING_ASSIGN().RE