[TypeErasure] Reference of forward declared type requires complete type
Hi all, I try to use boost.type_erasure (boost 1.59) with forward declared type as shown below: ================================================ #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/member.hpp> struct Type; BOOST_TYPE_ERASURE_MEMBER((HasTest), Test, 1) using Any = boost::type_erasure::any < boost::mpl::vector < HasTest<void(Type&)>, boost::type_erasure::destructible<>, boost::type_erasure::relaxed >
;
int main() { Any obj; } ================================================ However, the compiler (e.g. clang) complains about incomplete type: ================================================ /usr/local/include/boost/type_traits/is_base_and_derived.hpp:228:42: error: incomplete type 'Type' used in type trait expression BOOST_STATIC_CONSTANT(bool, value = (BOOST_IS_BASE_OF(B,D) && ! ::boost::is_same<ncvB,ncvD>::value)); ================================================ Replacing Type& with Type* can fix the problem. Is this a bug?
AMDG On 09/03/2015 09:20 PM, Yuan Yao wrote:
<snip>
struct Type;
BOOST_TYPE_ERASURE_MEMBER((HasTest), Test, 1)
<snip> HasTest<void(Type&)>, <snip> ================================================
However, the compiler (e.g. clang) complains about incomplete type:
================================================ /usr/local/include/boost/type_traits/is_base_and_derived.hpp:228:42: error: incomplete type 'Type' used in type trait expression BOOST_STATIC_CONSTANT(bool, value = (BOOST_IS_BASE_OF(B,D) && ! ::boost::is_same<ncvB,ncvD>::value)); ================================================
Replacing Type& with Type* can fix the problem. Is this a bug?
Probably. Is boost::type_erasure::is_placeholder in the instantiation backtrace? In Christ, Steven Watanabe
participants (2)
-
Steven Watanabe
-
Yuan Yao