
Joaquín Mª López Muñoz wrote:
The attached file implements this idea. I cannot test it myself under CW, it'd be great is someone can give it a try.
it seems that is_function doesn't work for this (function) type, either :-( Stefan ...found 318 targets... ...updating 5 targets... cw-C++-action ..\..\..\bin\boost\libs\type_traits\test\tricky_function_type_test.test\cw-9_4\debug\threading-multi\tricky_function_type_test.obj call "c:\Programme\Metrowerks\Codewarrior\Other Metrowerks Tools\Command Line Tools\cwenv.bat" -quiet set "ERRORLEVEL=" mwcc -c -lang c++ -maxerrors 5 -warnings on -maxwarnings 20 -nowraplines -g -O0 -inline off -cwd include -wchar_t on -warnings nounusedexpr,nounused -runtime dmd -RTTI on -iso_templates on "-I..\..\..\bin\boost\libs\type_traits\test" -I- "-IC:\views_cvs\boost" -o "..\..\..\bin\boost\libs\type_traits\test\tricky_function_type_test.test\cw-9_4\debug\threading-multi\tricky_function_type_test.obj" "C:\views_cvs\boost\libs\type_traits\test\tricky_function_type_test.cpp" ### mwcc Compiler: # In: ..\..\..\boost\type_traits\is_convertible.hpp # From: tricky_function_type_test.cpp # -------------------------------------- # 210: ); # Error: ^ # function call '_m_check({lval} void (), int)' does not match # 'boost::detail::is_convertible_basic_impl<void (&)(), boost::detail::int_convertible, false>::_m_check(boost::detail::any_conversion, ...)' (static) # 'boost::detail::is_convertible_basic_impl<void (&)(), boost::detail::int_convertible, false>::_m_check(boost::detail::int_convertible, int)' (static) # (point of instantiation: 'main()') # (instantiating: 'boost::is_enum<void ()>') # (instantiating: 'boost::detail::is_enum_impl<void ()>') # (instantiating: 'boost::detail::is_enum_helper<false>::type<void ()>') # (instantiating: 'boost::is_convertible<void (&)(), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl_dispatch<void (&)(), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl<void (&)(), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_basic_impl<void (&)(), boost::detail::int_convertible, false>') ### mwcc Compiler: # 210: ); # Error: ^ # function call '_m_check({lval} void (int), int)' does not match # 'boost::detail::is_convertible_basic_impl<void (&)(int), boost::detail::int_convertible, false>::_m_check(boost::detail::any_conversion, ...)' (static) # 'boost::detail::is_convertible_basic_impl<void (&)(int), boost::detail::int_convertible, false>::_m_check(boost::detail::int_convertible, int)' (static) # (point of instantiation: 'main()') # (instantiating: 'boost::is_enum<void (int)>') # (instantiating: 'boost::detail::is_enum_impl<void (int)>') # (instantiating: 'boost::detail::is_enum_helper<false>::type<void (int)>') # (instantiating: 'boost::is_convertible<void (&)(int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl_dispatch<void (&)(int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl<void (&)(int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_basic_impl<void (&)(int), boost::detail::int_convertible, false>') ### mwcc Compiler: # 210: ); # Error: ^ # function call '_m_check({lval} void (int &, double), int)' does not match # 'boost::detail::is_convertible_basic_impl<void (&)(int &, double), boost::detail::int_convertible, false>::_m_check(boost::detail::any_conversion, ...)' (static) # 'boost::detail::is_convertible_basic_impl<void (&)(int &, double), boost::detail::int_convertible, false>::_m_check(boost::detail::int_convertible, int)' (static) # (point of instantiation: 'main()') # (instantiating: 'boost::is_enum<void (int &, double)>') # (instantiating: 'boost::detail::is_enum_impl<void (int &, double)>') # (instantiating: 'boost::detail::is_enum_helper<false>::type<void (int &, double)>') # (instantiating: 'boost::is_convertible<void (&)(int &, double), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl_dispatch<void (&)(int &, double), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl<void (&)(int &, double), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_basic_impl<void (&)(int &, double), boost::detail::int_convertible, false>') ### mwcc Compiler: # 210: ); # Error: ^ # function call '_m_check({lval} void (int &, bool, int, int), int)' does not match # 'boost::detail::is_convertible_basic_impl<void (&)(int &, bool, int, int), boost::detail::int_convertible, false>::_m_check(boost::detail::any_conversion, ...)' (static) # 'boost::detail::is_convertible_basic_impl<void (&)(int &, bool, int, int), boost::detail::int_convertible, false>::_m_check(boost::detail::int_convertible, int)' (static) # (point of instantiation: 'main()') # (instantiating: 'boost::is_enum<void (int &, bool, int, int)>') # (instantiating: 'boost::detail::is_enum_impl<void (int &, bool, int, int)>') # (instantiating: 'boost::detail::is_enum_helper<false>::type<void (int &, bool, int, int)>') # (instantiating: 'boost::is_convertible<void (&)(int &, bool, int, int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl_dispatch<void (&)(int &, bool, int, int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl<void (&)(int &, bool, int, int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_basic_impl<void (&)(int &, bool, int, int), boost::detail::int_convertible, false>') ### mwcc Compiler: # 210: ); # Error: ^ # function call '_m_check({lval} void (int, bool, int *, int *, int, int, int, int, int), int)' does not match # 'boost::detail::is_convertible_basic_impl<void (&)(int, bool, int *, int *, int, int, int, int, int), boost::detail::int_convertible, false>::_m_check(boost::detail::any_conversion, ...)' (static) # 'boost::detail::is_convertible_basic_impl<void (&)(int, bool, int *, int *, int, int, int, int, int), boost::detail::int_convertible, false>::_m_check(boost::detail::int_convertible, int)' (static) # (point of instantiation: 'main()') # (instantiating: 'boost::is_enum<void (int, bool, int *, int *, int, int, int, int, int)>') # (instantiating: 'boost::detail::is_enum_impl<void (int, bool, int *, int *, int, int, int, int, int)>') # (instantiating: 'boost::detail::is_enum_helper<false>::type<void (int, bool, int *, int *, int, int, int, int, int)>') # (instantiating: 'boost::is_convertible<void (&)(int, bool, int *, int *, int, int, int, int, int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl_dispatch<void (&)(int, bool, int *, int *, int, int, int, int, int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_impl<void (&)(int, bool, int *, int *, int, int, int, int, int), boost::detail::int_convertible>') # (instantiating: 'boost::detail::is_convertible_basic_impl<void (&)(int, bool, int *, int *, int, int, int, int, int), boost::detail::int_convertible, false>') # Too many errors printed, aborting program ...failed cw-C++-action ..\..\..\bin\boost\libs\type_traits\test\tricky_function_type_test.test\cw-9_4\debug\threading-multi\tricky_function_type_test.obj... ...skipped <@boost!libs!type_traits!test\tricky_function_type_test.test\cw-9_4\debug\threading-multi>tricky_function_type_test.CMD for lack of <@boost!libs!type_traits!test\tricky_function_type_test.test\cw-9_4\debug\threading-multi>tricky_function_type_test.obj... ...skipped <@boost!libs!type_traits!test\tricky_function_type_test.test\cw-9_4\debug\threading-multi>tricky_function_type_test.exe for lack of <@boost!libs!type_traits!test\tricky_function_type_test.test\cw-9_4\debug\threading-multi>tricky_function_type_test.CMD... ...skipped <@boost!libs!type_traits!test\tricky_function_type_test.test\cw-9_4\debug\threading-multi>tricky_function_type_test.run for lack of <@boost!libs!type_traits!test\tricky_function_type_test.test\cw-9_4\debug\threading-multi>tricky_function_type_test.exe... ...failed updating 1 target... ...skipped 4 targets...