cl::vector vs std::vector: different iterator behaviour

I don’t understand the different behaviour of the cl::vector<> in the C++ bindings for OpenCL. Consider the following code:

Header Top.hpp:

class Top {
    void setBool(bool b);
    bool getBool();
    bool status;

Source Top.cpp:

#include "Top.hpp"   

void Top::setBool(bool b) {
    std::cout << (void*)this << " setBool("<< b<< ")
    status = b;

bool Top::getBool() {
    std::cout << (void*)this << " getBool() returns " << status << std::endl;
    return status;

Use the above:

#define __NO_STD_VECTOR

#include <iostream>
#include "CL/cl.hpp"
#include "Top.hpp"

using namespace cl;
using namespace std;

cl::vector<Top> js;

int main() {
    cout << js[0].getBool() << endl;
    for(cl::vector<Top>::iterator i = js.begin(); i != js.end(); ++i) {
    cout << js[0].getBool() << endl;

As i understand with __NO_STD_VECTOR the std::vector is overridden. The output is

0x6021c0 setBool(1)
0x6021c0 getBool() returns 1
0x7fffae671d60 setBool(0)
0x6021c0 getBool() returns 1

So the location returned by the iterator is definitely wrong.

Using the above with the std::vector (and changing the namespaces to std of course) however gives the expected output:

0x1be0010 setBool(1)
0x1be0010 getBool() returns 1
0x1be0010 setBool(0)
0x1be0010 getBool() returns 0

This iterator is acting differently, but it’s supposed to replace the std::vector to avoid compatibility issues. Am I missing something? It seems odd.