Title says it all really, code like:
#include <tr1/type_traits>
struct foo;
static const bool b = std::tr1::is_object<foo>::value;
doesn't compile, when it should: although many of the type_traits have a
precondition that they need not work with incomplete types, this isn't one of
those traits.
Oh and the error message was:
/usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits:
In instantiation of `const bool std::tr1::__conv_helper<incomplete_type&,
incomplete_type*>::__value':
/usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits:192:
instantiated from `const bool std::tr1::__is_function_helper<incomplete_type,
false>::__value'
/usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits:202:
instantiated from `std::tr1::is_function<incomplete_type>'
/usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits:222:
instantiated from `std::tr1::is_object<incomplete_type>'
/home/john/boost/libs/type_traits/test/is_object_test.cpp:24: instantiated
from here
/usr/local/gcc/4.0.2/lib/gcc/i686-pc-linux-gnu/4.0.2/../../../../include/c++/4.0.2/tr1/type_traits:62:
error: invalid use of undefined type `struct incomplete_type'
/home/john/boost/libs/type_traits/test/test.hpp:349: error: forward declaration
of `struct incomplete_type'
Regards, John Maddock.
--
Summary: is_object fails to compile with incomplete types
Product: gcc
Version: 4.0.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: john at johnmaddock dot co dot uk
GCC build triplet: linux.x86
GCC host triplet: linux.x86
GCC target triplet: linux.x86
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24808