Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Macro BOOST_PROTO_EXTENDS_USING_ASSIGN_NON_DEPENDENT

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:


PrevUpHomeNext