We had a workaround because GCC 5 does not evaluate static assertions that are dependent on template parameters. This commit removes the workaround and marks the corresponding tests as unsupported with GCC 5. This has the benefit of bringing the new and the old test formats closer without having to carry a workaround for an old compiler in the new test format.
47 lines
930 B
C++
47 lines
930 B
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// GCC 5 does not evaluate static assertions dependent on a template parameter.
|
|
// UNSUPPORTED: gcc-5
|
|
|
|
// <functional>
|
|
|
|
// template<Returnable R, class T> unspecified mem_fn(R T::* pm);
|
|
|
|
#include <functional>
|
|
#include <cassert>
|
|
|
|
struct A
|
|
{
|
|
double data_;
|
|
};
|
|
|
|
template <class F>
|
|
void
|
|
test(F f)
|
|
{
|
|
{
|
|
A a;
|
|
f(a) = 5;
|
|
assert(a.data_ == 5);
|
|
A* ap = &a;
|
|
f(ap) = 6;
|
|
assert(a.data_ == 6);
|
|
const A* cap = ap;
|
|
assert(f(cap) == f(ap));
|
|
f(cap) = 7;
|
|
}
|
|
}
|
|
|
|
int main(int, char**)
|
|
{
|
|
test(std::mem_fn(&A::data_));
|
|
|
|
return 0;
|
|
}
|