Hi,
The program below this email does not compile with gcc 4.1.2.
g++ (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
I understand that I should ask on the gcc mailing list first, as gcc
says it is own bug. But I want to make sure it is not become the
typeof package uses some too advanced compiler features. Can somebody
let me know if the following code can be compiled by a more recent
version of gcc or some other compiler?
Thanks,
Peng
#include
#include <iostream>
namespace A {
template <typename T>
class X {
public:
X() { }
X(T t) : _t(t) { }
const T &the_t() const { return _t; }
private:
T _t;
};
template
struct multiply_traits;
template
struct multiply_traits {
typedef X<T1> result_type;
};
template
typename multiply_traits::result_type operator*(const
X<T1> &x, const T2 &t) {
return X<T1>(x.the_t() * t);
}
}
namespace B {
template <typename T>
class Y {
public:
Y(T t) : _t(t) { }
const T &the_t() const { return _t; }
private:
T _t;
};
template
//Y::result_type> operator*(const
Y<T1> &y, const T2 &t) {
//Y<T1> operator*(const Y<T1> &y, const T2 &t) {
Y operator*(const Y<T1> &y, const T2 &t) {
return Y<T1>(y.the_t() * t);
}
}
int main () {
A::X<int> x(2);
B::Y y(x);
std::cout << (x * 3).the_t() << std::endl;
std::cout << (y * 5).the_t().the_t() << std::endl;
}