Вызов функции const, а не в версии не-const

Я пытался обернуть что-то похожее на общие указатели данных 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), или есть что-то, что мне не хватает?

24
задан coyotte508 2 September 2011 в 17:22
поделиться