目的のために Qt の共有データ ポインターに似たものをラップしようとしました。
私は C++0x オプションを使用してコンパイルしています。最小限のコードは次のとおりです。
struct Data {
int x() const {
return 1;
}
};
template <class T>
struct container
{
container() {
ptr = new T();
}
T & operator*() {
puts("non const data ptr");
return *ptr;
}
T * operator->() {
puts("non const data ptr");
return ptr;
}
const T & operator*() const {
puts("const data ptr");
return *ptr;
}
const T * operator->() const {
puts("const data ptr");
return ptr;
}
T* ptr;
};
typedef container<Data> testType;
void testing() {
testType test;
test->x();
}
ご覧のとおり、Data.x は const 関数なので、呼び出される演算子 -> は const でなければなりません。そして、非 const をコメントアウトすると、エラーなしでコンパイルされるので、可能です。それでも私の端末は次のように出力します:
「非定数データptr」
それは GCC のバグ (私は 4.5.2 を持っています) ですか、それとも欠けているものがありますか?