
On Sat, 13 Oct 2007 16:38:36 +0200, Marco Costalba <mcostalba@gmail.com> wrote:
On 10/13/07, Marco <mrcekets@gmail.com> wrote:
P.S: In case you are wondering "why didn't he tried?" is that I had some compiler error (probably SFINAE related) and didn't had the time to dig it more.
That sounds odd to me I used only partial template specialization and just one enable_if in all my code. What compiler are you using ?
This is the compiler (under Windows):
gcc (GCC) 3.4.2 (mingw-special)
And this is the error log:
In file included from boost/overload/detail/overload_base.hpp:14, from boost/overload/overload_impl.hpp:12, from boost/overload/overload.hpp:18, from test.cpp:10: boost/overload/detail/final_overload_base.hpp:23: warning: converting of negative value `-0x000000001' to `unsigned int' In file included from test.cpp:21: boost/overload/overload_impl.hpp: In instantiation of `boost::overloads::overload<void ()(std::string, std::string, std::string), int ()(bar1*, char), double ()(const bar2*, int, char), char ()(std::string), int ()(char), double ()(int, char), boost::overloads::detail::no_signature, boost::overloads::detail::no_signature, boost::overloads::detail::no_signature, boost::overloads::detail::no_signature>': boost/overload/detail/trait_by_index.hpp:23: instantiated from `boost::overloads::detail::extent<test01::overload_type>' test/test_trait_by_index.hpp:11: instantiated from here boost/overload/overload_impl.hpp:47: error: incomplete type `boost::overloads::detail::extent<test01::overload_type>' used in nested name specifier In file included from test.cpp:23: boost/overload/detail/functor_has_signature.hpp: In instantiation of `boost::overloads::detail::func_obj_has_signature<f6_t, double ()(float, float), boost::overloads::detail::member_func_const_tag>': boost/overload/detail/functor_has_signature.hpp:107: instantiated from `boost::overloads::detail::functor_has_signature<f6_t, double ()(float, float), boost::detail::function::function_obj_tag>' test/test_trait_by_functor.hpp:12: instantiated from here boost/overload/detail/functor_has_signature.hpp:52: error: incomplete type `boost::overloads::detail::func_obj_has_signature_impl<double (foo6::*)(float, float) const>' used in nested name specifier boost/overload/detail/functor_has_signature.hpp: In instantiation of `boost::overloads::detail::func_obj_has_signature<f6_t, double ()(float, float), void>': boost/overload/detail/functor_has_signature.hpp:107: instantiated from `boost::overloads::detail::functor_has_signature<f6_t, double ()(float, float), boost::detail::function::function_obj_tag>' test/test_trait_by_functor.hpp:12: instantiated from here boost/overload/detail/functor_has_signature.hpp:42: error: incomplete type `boost::overloads::detail::func_obj_has_signature_impl<double (foo6::*)(float, float)>' used in nested name specifier
I didn't succeed in guessing what's wrong, I'll try to get the specific compiler and to perform a pool of tests.
It compiles and works flawlessy with gcc 4.2.2 under Linux.
Interesting enough the obviously "warnable" line in final_overload_base.hpp
static const unsigned int index = -1;
is warned only with gcc 3.4, not with the newer gcc 4.2 also if -pedantic is given.
Marco
Truly a strange behaviour. Anyway I changed -1 to UINT_MAX . Marco -- Using Opera's revolutionary e-mail client: http://www.opera.com/mail/