Because allocate is enough for plain old data. You want
Code:
#include <memory>
#include <iostream>
#include <string>
using namespace std;
int main() {
allocator<string> alloc;
string* p = alloc.allocate(sizeof *p);
alloc.construct(p, "hello, world");
cout << *p << endl;
alloc.destroy(p);
alloc.deallocate(p, 1UL);
}