| // Origin: Peter Schmid <schmid@snake.iap.physik.tu-darmstadt.de> |
| |
| // { dg-do link } |
| |
| template <class T> |
| class Ptr { |
| protected: |
| T * ptr; |
| |
| public: |
| |
| Ptr(void) : ptr(0) { } |
| Ptr(T * p) : ptr(p) { } |
| |
| ~Ptr(void) { delete ptr; } |
| |
| operator T & () { return *ptr; } |
| }; |
| |
| class base { |
| public: |
| base(void) { } |
| ~base(void) { } |
| }; |
| |
| |
| class foo : public base { |
| private: |
| foo(const foo & rv); |
| |
| public: |
| |
| foo(void) { } |
| ~foo(void) { } |
| }; |
| |
| void func2(base & b) { |
| // ... |
| } |
| |
| int main () { |
| Ptr<foo> f = new foo; |
| /* This should not result in a copy; the result of the conversion |
| operator should be bound directly to the reference argument to |
| `func2'. */ |
| func2(f); |
| } |