Я пытался обернуть что-то похожее на общие указатели данных Qt для моих целей, и после тестирования я обнаружил, что когда должна быть вызвана функция Const, вместо этого выбрана его версия Non-Const.
Я компилирую параметры 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 Function, поэтому оператор -> вызывается, должен быть Const One. И когда я прокомментую не-Const один, он компилируется без ошибок, так что это возможно. И все же мой терминал печатает:
«Non Const Data PTR»
Это ошибка GCC (у меня 4.5.2), или есть что-то, что мне не хватает?