$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Sean Perry (perry_at_[hidden])
Date: 2007-11-22 14:27:14
This code does have the name hiding.overload resolution issues still. Can
you change the call to swap so you use "std::swap(t.x, t.y)" instead of the
using declaration and "swap(t.x,t.y)".
The following compiles for me:
#include <algorithm>
template<typename T>
struct foo
{
T t;
foo():t(0){}
void swap(foo& x){swap(x);}
void swap(foo& x)
{
std::swap(t,x.t);
}
};
template<typename T>
void swap(foo<T>& x,foo<T>& y)
{
x.swap(y);
}
int main()
{
foo<int> x,y;
x.swap(y);
}
--
Sean Perry
Compiler Development
IBM Canada Lab
(905)-413-6031 (tie 313-6031), fax (905)-413-4839
Joaquín Mª López
Muñoz
<joaquin_at_[hidden]> To
Sent by: boost_at_[hidden]
boost-bounces_at_lis cc
ts.boost.org
Subject
[boost]
11/22/2007 01:28 Re:[config][vacpp8.0]BOOST_FUNCTION
PM _SCOPE_USING_DECLARATION_BREAKS_ADL
should be defined?
Please respond to
boost_at_lists.boost
.org
"K. Noel Belcourt" ha escrito:
> On Nov 22, 2007, at 3:22 AM, Joaquín Mª López Muñoz wrote:
>
> > Noel, could you please try the following variation of the test snippet,
which
> > tries to mimic as closely as possible the structure of the failing
code? Thank you!
>
> Okay, here it is.
>
> > xlC fsudba3.cpp
> "fsudba3.cpp", line 12.10: 1540-0256 (S) A parameter of type
> "foo<int> &" cannot be initialized with an expression of type "int".
> "fsudba3.cpp", line 12.10: 1540-1205 (I) The error occurred while
> converting to parameter 1 of "foo<int>::swap(foo<int> &)".
> "fsudba3.cpp", line 9.8: 1540-0700 (I) The previous message was
> produced while processing "foo<int>::swap_(foo<int> &)".
> "fsudba3.cpp", line 8.21: 1540-0700 (I) The previous message was
> produced while processing "foo<int>::swap(foo<int> &)".
> "fsudba3.cpp", line 25.8: 1540-0700 (I) The previous message was
> produced while processing "main()".
Ok, so we've got a case again. John, let me re-ask you about what we
should do regarding this compiler bug. For your reference, the offending
code
does not involve name hiding anymore:
#include <algorithm>
template<typename T>
struct foo
{
T t;
foo():t(0){}
void swap(foo& x){swap_(x);}
void swap_(foo& x)
{
using std::swap;
swap(t,x.t);
}
};
template<typename T>
void swap(foo<T>& x,foo<T>& y)
{
x.swap(y);
}
int main()
{
foo<int> x,y;
x.swap(y);
}
Of course there's no big problem if it's decided that this shouldn't be
covered
by BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL,
but I think the bug qualifies as a reasonable extension for the concept
covered
by the macro.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
_______________________________________________
Unsubscribe & other changes:
http://listarchives.boost.org/mailman/listinfo.cgi/boost