diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:01:22 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:01:22 +0000 |
commit | 71d5a2540a98c81f5bcaeb48805e0e2881f530ef (patch) | |
tree | 5343938942df402b49ec7300a1c25a2d4ccd5821 /unittests/Support/TrailingObjectsTest.cpp | |
parent | 31bbf64f3a4974a2d6c8b3b27ad2f519caf74057 (diff) |
Diffstat (limited to 'unittests/Support/TrailingObjectsTest.cpp')
-rw-r--r-- | unittests/Support/TrailingObjectsTest.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/unittests/Support/TrailingObjectsTest.cpp b/unittests/Support/TrailingObjectsTest.cpp index cb5c47d1b25b..23acc54d2376 100644 --- a/unittests/Support/TrailingObjectsTest.cpp +++ b/unittests/Support/TrailingObjectsTest.cpp @@ -236,3 +236,24 @@ TEST(TrailingObjects, Realignment) { reinterpret_cast<char *>(C + 1) + 1, alignof(long)))); } } + +// Test the use of TrailingObjects with a template class. This +// previously failed to compile due to a bug in MSVC's member access +// control/lookup handling for OverloadToken. +template <typename Derived> +class Class5Tmpl : private llvm::TrailingObjects<Derived, float, int> { + using TrailingObjects = typename llvm::TrailingObjects<Derived, float>; + friend TrailingObjects; + + size_t numTrailingObjects( + typename TrailingObjects::template OverloadToken<float>) const { + return 1; + } + + size_t numTrailingObjects( + typename TrailingObjects::template OverloadToken<int>) const { + return 2; + } +}; + +class Class5 : public Class5Tmpl<Class5> {}; |