|
Boost Testing : |
From: Boris Gubenko (Boris.Gubenko_at_[hidden])
Date: 2007-02-16 18:55:41
I realize that regardless of whether the aCC6-specific patch for
[python]data_members.hpp in the attached mail is acceptable, it is,
probably, too late for 1.34 for a non-release platform.
Given this, can python library test data_members be marked as expected
failure for HP-UX/aCC6 (toolset "acc") in both 1.34 and HEAD with the
following remark (feel free to edit it as you see fit):
"This test assumes standard-compliant dependent template name lookup which
is available with aCC6 only in strict ansi mode. Since on HP-UX/aCC6 boost
testing is done in the default compilation mode, this test fails to
compile on this platform."
Thanks,
Boris
----- Original Message -----
From: "Boris Gubenko" <Boris.Gubenko_at_[hidden]>
To: <boost_at_[hidden]>
Cc: "Boris Gubenko" <Boris.Gubenko_at_[hidden]>
Sent: Wednesday, January 10, 2007 8:32 PM
Subject: [boost] [python] patch for data_members.hpp for HP-UX
> With aCC6 on HP-UX, python library test data_members.cpp fails to compile
> with "more than one instance of overloaded function matches the argument
> list" error. x.cpp below is a reduced reproducer derived from
> data_members.cpp.
>
> The reason it fails to compile is that by default, aCC6 disables standard-
> compliant dependent template name lookup implemented by EDG in Version
> 2.44. The program does compile, with both aCC6 and "bare" EDG Front End
> Version 3.5, in strict ansi mode where "the 2-phase lookup of template
> names is performed as required by the standard" or when standard lookup
> is explicitly requested via -dep_name option -- see below. Other EDG-based
> compilers exhibit similar behaviour, in particular, Comeau C/C++ 4.3.8
> and Intel's icc 9.0.
>
> Attached aCC6-specific patch for data_members.hpp disambigues function
> call in question by casting the argument, similar to the cast under the
> WORKAROUND macro in x.cpp below.
>
> With the attached patch, test data_members passes on HP-UX. I also
> verified, that the patch does not cause any regressions. Please apply it
> to CVS HEAD and the RC branch.
>
> Thanks,
> Boris
>
> x.cpp
> -----
> namespace detail
> {
> struct not_specified {};
>
> template <class D, class Policies>
> void make_getter(D* d, Policies const& policies, int);
>
> template <class D>
> void make_getter(D* d, not_specified policy, long)
> {
> #ifdef WORKAROUND
> detail::make_getter(d, static_cast<not_specified const&>(policy), 0);
> #else
> detail::make_getter(d, policy, 0);
> #endif
> }
>
> template <class D, class P>
> void make_getter(D& d, P& p, ...);
> } // namespace detail
>
> template <class D>
> inline void make_getter(D const& d)
> {
> detail::make_getter(d, detail::not_specified(), 0L);
> }
>
> const int i = 0;
>
> void compilability_test()
> {
> make_getter(&i);
> }
>
> cxxosf.zko.hp.com> eccp --version -c x.cpp
> Edison Design Group C/C++ Front End, version 3.5 (Dec 20 2004 13:57:48)
> Copyright 1988-2004 Edison Design Group, Inc.
>
> "x.cpp", line 11: error: more than one instance of overloaded function
> "detail::make_getter" matches the argument list:
> function template
> "void detail::make_getter(D *, const Policies &, int)"
> function template "void detail::make_getter(D *,
> detail::not_specified, long)"
> function template "void detail::make_getter(D &, P &, ...)"
> argument types are: (const int *, detail::not_specified, int)
> detail::make_getter(d, policy, 0);
> ^
> detected during instantiation of "void detail::make_getter(D *,
> detail::not_specified, long) [with D=const int]"
>
> 1 error detected in the compilation of "x.cpp".
> cxxosf.zko.hp.com> eccp -c --dep_name x.cpp
> cxxosf.zko.hp.com>
>
> bash-2.03$ aCC -V
> aCC: HP C/aC++ B3910B A.06.14 [Dec 21 2006]
> bash-2.03$ aCC -c x.cpp
> "x.cpp", line 11: error #2308: more than one instance of overloaded function
> "detail::make_getter" matches the argument list:
> function template
> "void detail::make_getter(D *, const Policies &, int)"
> function template "void detail::make_getter(D *,
> detail::not_specified, long)"
> function template "void detail::make_getter(D &, P &, ...)"
> argument types are: (const int *, detail::not_specified, int)
> detail::make_getter(d, policy, 0);
> ^
> detected during instantiation of "void detail::make_getter(D *,
> detail::not_specified, long) [with D=const int]" at line 21
>
> 1 error detected in the compilation of "x.cpp".
> bash-2.03$ aCC -c +dep_name x.cpp
> bash-2.03$
>
--------------------------------------------------------------------------------
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost