//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "test_macros.h" #if TEST_STD_VER < 11 #error #else // <iterator> // template <class C> auto begin(C& c) -> decltype(c.begin()); // template <class C> auto begin(const C& c) -> decltype(c.begin()); // template <class C> auto end(C& c) -> decltype(c.end()); // template <class C> auto end(const C& c) -> decltype(c.end()); // template <class E> reverse_iterator<const E*> rbegin(initializer_list<E> il); // template <class E> reverse_iterator<const E*> rend(initializer_list<E> il); #include <iterator> #include <cassert> namespace Foo { struct FakeContainer {}; typedef int FakeIter; FakeIter begin(const FakeContainer &) { return 1; } FakeIter end (const FakeContainer &) { return 2; } FakeIter rbegin(const FakeContainer &) { return 3; } FakeIter rend (const FakeContainer &) { return 4; } FakeIter cbegin(const FakeContainer &) { return 11; } FakeIter cend (const FakeContainer &) { return 12; } FakeIter crbegin(const FakeContainer &) { return 13; } FakeIter crend (const FakeContainer &) { return 14; } } int main(){ // Bug #28927 - shouldn't find these via ADL TEST_IGNORE_NODISCARD std::cbegin (Foo::FakeContainer()); TEST_IGNORE_NODISCARD std::cend (Foo::FakeContainer()); TEST_IGNORE_NODISCARD std::crbegin(Foo::FakeContainer()); TEST_IGNORE_NODISCARD std::crend (Foo::FakeContainer()); } #endif