Мне кажется засорять std хуже чем глобальный (или свой) неймспейс.
Кроме того подобного эффекта можно добиться перегрузив глобальные operator new & delete. Не уверен сколько UB лежит на этой дороге, но на первый взгляд должно работать с условием того, что тип будет создаваться через new (например std::make_uniqe<Foo>()
).
Да, идея выглядит неплохо, однако в принципе, если подумать, ничуть не лучше и не хуже специализации. В общем, я уже понял, что каждый вариант нормальный, просто, конечно, стоит смотреть, нужно ли это на самом деле