
Summary: - If a parameter is used, nonnull checking needs function prototype to retrieve the corresponding parameter's attributes. However, at the prototype substitution phase when a template is being instantiated, expression may be created and checked without a fully specialized prototype. Under such a scenario, skip nonnull checking on that argument. Reviewers: rjmccall, tra, yaxunl Subscribers: javed.absar, kristof.beyls, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D59900 llvm-svn: 357236
24 lines
393 B
C++
24 lines
393 B
C++
// RUN: %clang_cc1 -std=c++11 -fsyntax-only %s
|
|
|
|
template < bool, class > struct A {};
|
|
template < class, int > void f () {};
|
|
template < class T, int >
|
|
decltype (f < T, 1 >) f (T t, typename A < t == 0, int >::type) {};
|
|
|
|
struct B {};
|
|
|
|
int main ()
|
|
{
|
|
f < B, 0 >;
|
|
return 0;
|
|
}
|
|
|
|
template <typename T>
|
|
auto foo(T x) -> decltype((x == nullptr), *x) {
|
|
return *x;
|
|
}
|
|
|
|
void bar() {
|
|
foo(new int);
|
|
}
|