From: Douglas Gregor
If a template argument for a template type parameter is an retainable object owner type that does not have an explicit ownership qualifier, it is adjusted to have __strong -qualification. This adjustment occurs both regardless of whether the +qualification. This adjustment occurs regardless of whether the template argument was deduced or explicitly specified.
Rationale: __strong is a useful default for containers (e.g., std::vector<id>), which would otherwise require explicit qualification. Moreover, unqualified retainable object pointer types are unlikely to be useful within templates, since they generally need to have a qualifier applied to the before being used.