C++11 allows its implementations to perform (some) garbage collection utilities. Why would the standard allow this? I was always under the impression that in C++, you don't pay for what you don't use. To me, (implicit) GC feels like it undermines this ideology. In addition, it's not hard to write and use an explicit garbage collection utility in C++ via smart-pointers.
Second, GC will make some otherwise valid programs invalid. Examples include pointer masking and related low-level pointer "hacks".
int * nums = new int[10];
nums += 2;
*nums = 777; // nothing points to the new'ed int[10] at this point
// oh no! nums could have gotten collected!!! (so lets assume it was)
*nums = 666; // crash (or memory corruption (or something else that's bad))
The GC is not required to exist by the C++11 standard, but it might be in the future versions.
It is not going to be enforced on you - it will be there only if you request it. It will not collect your normal pointers, it will not collect the current smart pointers. So, it is still the 'don't use - don't pay for it'. It will work only on the pointers you explicitly ask it to, so your example will still work as it does now.
See Sutter’s Mill: Garbage Collection Synopsis, and C++
By "reference counting", Sutter is refering to
std::shared_ptr
and similar things.