diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-06-17 22:11:49 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-06-17 22:11:49 +0000 |
commit | e46db90c9aa00cbe1cbc6211ab4c5181ce287ce4 (patch) | |
tree | ff141edad4598f3c5fd6028ee6d0dd3446ed3950 /clang/lib/AST/TemplateBase.cpp | |
parent | c662ec8bd33e6d81f9477c3a99751b64fd9a7be2 (diff) | |
download | bcm5719-llvm-e46db90c9aa00cbe1cbc6211ab4c5181ce287ce4.tar.gz bcm5719-llvm-e46db90c9aa00cbe1cbc6211ab4c5181ce287ce4.zip |
Objective-ARC++: infer template type arguments of
ownership-unqualified retainable object type as __strong. This allows
us to write, e.g.,
std::vector<id>
and we'll infer that the vector's element types have __strong
ownership semantics, which is far nicer than requiring:
std::vector<__strong id>
Note that we allow one to override the ownership qualifier of a
substituted template type parameter, e.g., given
template<typename T>
struct X {
typedef __weak T type;
};
X<id> is treated the same as X<__strong id>. At instantiation type,
the __weak in "__weak T" overrides the (inferred or specified)
__strong on the template argument type, so that we can still provide
metaprogramming transformations.
This is part of <rdar://problem/9595486>.
llvm-svn: 133303
Diffstat (limited to 'clang/lib/AST/TemplateBase.cpp')
-rw-r--r-- | clang/lib/AST/TemplateBase.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/AST/TemplateBase.cpp b/clang/lib/AST/TemplateBase.cpp index 6114a5a051b..103da1d8a47 100644 --- a/clang/lib/AST/TemplateBase.cpp +++ b/clang/lib/AST/TemplateBase.cpp @@ -277,8 +277,10 @@ void TemplateArgument::print(const PrintingPolicy &Policy, break; case Type: { + PrintingPolicy SubPolicy(Policy); + SubPolicy.SuppressStrongLifetime = true; std::string TypeStr; - getAsType().getAsStringInternal(TypeStr, Policy); + getAsType().getAsStringInternal(TypeStr, SubPolicy); Out << TypeStr; break; } |