forked from OSchip/llvm-project
Enable expression transformations in the current-instantiation
rebuilder, i.e., remove a silly short-sighted hack from long ago. Thanks to Abramo Bagnara for the test case/bug report! llvm-svn: 109583
This commit is contained in:
parent
df65c8ed2a
commit
bbfd2c0a86
|
@ -5427,15 +5427,6 @@ namespace {
|
|||
this->Loc = Loc;
|
||||
this->Entity = Entity;
|
||||
}
|
||||
|
||||
/// \brief Transforms an expression by returning the expression itself
|
||||
/// (an identity function).
|
||||
///
|
||||
/// FIXME: This is completely unsafe; we will need to actually clone the
|
||||
/// expressions.
|
||||
Sema::OwningExprResult TransformExpr(Expr *E) {
|
||||
return getSema().Owned(E->Retain());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -164,3 +164,38 @@ namespace ConstantInCurrentInstantiation {
|
|||
template<typename T>
|
||||
int X<T>::array[X<T>::value] = { 1, 2 };
|
||||
}
|
||||
|
||||
namespace Expressions {
|
||||
template <bool b>
|
||||
struct Bool {
|
||||
enum anonymous_enum { value = b };
|
||||
};
|
||||
struct True : public Bool<true> {};
|
||||
struct False : public Bool<false> {};
|
||||
|
||||
template <typename T1, typename T2>
|
||||
struct Is_Same : public False {};
|
||||
template <typename T>
|
||||
struct Is_Same<T, T> : public True {};
|
||||
|
||||
template <bool b, typename T = void>
|
||||
struct Enable_If {};
|
||||
template <typename T>
|
||||
struct Enable_If<true, T> {
|
||||
typedef T type;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class Class {
|
||||
public:
|
||||
template <typename U>
|
||||
typename Enable_If<Is_Same<U, Class>::value, void>::type
|
||||
foo();
|
||||
};
|
||||
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
typename Enable_If<Is_Same<U, Class<T> >::value, void>::type
|
||||
Class<T>::foo() {}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue