emplace is not able to emplace const objects. It's a flaw in emplace's interface: emplace's first parameter defines the type of the input pointer, so if you want to emplace a const object, you have to accept a const pointer, which you obviously aren't allowed to modify... Of course, emplace could ignore that, but then it would also silently violate const correctness, with no explicit directive from the user... eg:
```D
const int i = 5;
emplace(&I, 3); //No problem!
```

For "shared", I'm unsure.

It should still safe, since the second argument "e" is still const, so if anything fishy is going on, the emplace will fail. Eg:

```
struct S
{
    int* p;
}
const int i;
const(int[]) arr = [1, 2, 3];
const(S[]) sss = [S(&i), S(&i)];
arr.array(); //This is OK
sss.array(); //This is fishy. I'll turn it down
```

So my conclusion is that, yes, it's imperfect. However, at worst it only "rejects-valid", but it never "accepts-invalid".

I could try to add more workaround, but at this point, we are *really* being held back by emplace, so I'm not sure it's worth pushing too hard.