Я пытался обернуть что-то похожее на общие указатели данных Qt для своих целей, и после тестирования я обнаружил, что когда нужно вызывать функцию const, вместо нее была выбрана неконстантная версия.
I 'm компилируется с опциями 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 является константной функцией, поэтому оператор -> вызываемый должен быть константным.И когда я закомментирую неконстантный, он компилируется без ошибок, так что это возможно.Тем не менее мой терминал печатает:
"неконстантные данные ptr"
Это ошибка GCC (у меня 4.5.2), или я что-то упускаю?