https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102609
--- Comment #14 from Barry Revzin <barry.revzin at gmail dot com> ---
> I am finding myself realizing that implementing this as a member function and
> turning off member function bits seems to be more difficult than implementing
> it as a static function and implementing member function bits will be.
That's how I implemented this in EDG - static member functions that just have
some extra powers.
> Of these cases, is f0 or f1 and g0 or g1 correct? I assume the answer is f1
> and g1.
Both are correct - you're still a member of S, so you don't have to qualify
S::my_type (I mean, you can, it's not incorrect, but it's just not necessary -
means the same thing either way).
> When deduced, f0 or f1 and g0 or g1? I would definitely think f1 and g1 now.
These now might actually mean different things. Unqualified my_type is still
valid and means S::my_type (i.e. int). But Self::my_type could now mean a
different type. Merging the two examples:
struct S {
using my_type = int;
template<typename Self>
void f0(this Self, my_type);
template<typename Self>
void f1(this Self, Self::my_type);
};
struct D : S {
using my_type = double;
};
D().f0(2.0); // calls S::f0<D>, which takes an int
D().f1(2.0); // calls S::f1<D>, which takes a double