Opened 13 years ago

Closed 13 years ago

#3337 closed Bugs (fixed)

mpl::has_push_back_arg/mpl:::has_push_front_arg are incomplete types

Reported by: Christopher Schmidt Owned by: Aleksey Gurtovoy
Milestone: Boost 1.40.0 Component: mpl
Version: Boost Development Trunk Severity: Problem
Keywords: Cc: Christopher Schmidt

Description

boost::mpl::has_push_back_arg (https://svn.boost.org/trac/boost/browser/trunk/boost/mpl/aux_/push_back_impl.hpp?rev=54948#L28) and boost::mpl::push_front_arg (https://svn.boost.org/trac/boost/browser/trunk/boost/mpl/aux_/push_front_impl.hpp?rev=54948#L28) are both declared but not defined. This leads to a compiler error when using mpl::has_push_back (https://svn.boost.org/trac/boost/browser/trunk/boost/mpl/push_back.hpp?rev=54948#L40) / mpl::has_push_front (https://svn.boost.org/trac/boost/browser/trunk/boost/mpl/push_front.hpp?rev=54948#L40) on a mpl sequence (to be precise a fusion sequence) which needs complete 'argument' types when being instanced.

Minimal testcase:
#include <boost/mpl/transform.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/mpl.hpp>
boost::mpl::transform<boost::fusion::vector<>,boost::mpl::_1>::type t;

Change History (3)

comment:1 by Christopher Schmidt, 13 years ago

Cc: Christopher Schmidt added

comment:2 by Steven Watanabe, 13 years ago

I don't think that it's safe in general to rely on the default implementation of has_push_back for sequences where push_back has any requirements on the arguments. I guess it doesn't hurt to make them complete types, though, since this is a pretty minimal requirement.

comment:3 by Steven Watanabe, 13 years ago

Resolution: fixed
Status: newclosed

(In [55672]) Provide definitions for the dummy structs used by has_push_back_impl and has_push_front_impl so that they work with Fusion containers. Fixes #3337.

Note: See TracTickets for help on using tickets.