[Bug c++/58954] accessing a private member function in decltype of a friend class causes access control error
daniel.kruegler at googlemail dot com
gcc-bugzilla@gcc.gnu.org
Fri Nov 1 06:53:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58954
Daniel Krügler <daniel.kruegler at googlemail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |daniel.kruegler@googlemail.
| |com
--- Comment #1 from Daniel Krügler <daniel.kruegler at googlemail dot com> ---
This seems to be a regression, the example was accepted in gcc 4.7.3.
The following is a first attempt to reduce the complexity of the example, in
particular by removing any library dependencies and any possible interaction
with alias templates and alias typedefs, furthermore the additional friend
declaration in template base is neither needed nor should it be relevant for
this issue, therefore has been removed:
//---------------
template<class T>
T&& declval();
template<class T>
struct foo_argument
{
template<class Ret, class C, class Arg>
static Arg test(Ret (C::*)(Arg));
typedef decltype(test(&T::template foo<>)) type;
};
template<class T, class>
struct dependent { typedef T type; };
template<class T>
struct base
{
template<class Ignore = void>
auto foo(int i) -> decltype(declval<
typename dependent<T&, Ignore>::type
>().foo_impl(i));
};
struct derived : base<derived>
{
friend struct base<derived>;
private:
int foo_impl(int i);
};
int main()
{
foo_argument<derived>::type var = 0;
return var;
}
//---------------
More information about the Gcc-bugs
mailing list