
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 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