155263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier//===----------------------------------------------------------------------===//
255263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier//
355263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier//                     The LLVM Compiler Infrastructure
455263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier//
555263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier// This file is dual licensed under the MIT and the University of Illinois Open
655263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier// Source Licenses. See LICENSE.TXT for details.
755263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier//
855263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier//===----------------------------------------------------------------------===//
955263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier
1055263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier// <set>
1155263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier
1216e2ba19dfffdcf9bba202eb8a27fd79e3d15303Stephan T. Lavavej// Check that std::set and its iterators can be instantiated with an incomplete
1355263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier// type.
1455263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier
1555263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier#include <set>
1655263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier
1755263484af32fca58300eb14107a36fc40c80ce1Eric Fiselierstruct A {
1855263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    typedef std::set<A> Set;
1955263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    int data;
2055263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    Set m;
2155263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    Set::iterator it;
2255263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    Set::const_iterator cit;
2355263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier};
2455263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier
2555263484af32fca58300eb14107a36fc40c80ce1Eric Fiselierinline bool operator==(A const& L, A const& R) { return &L == &R; }
2655263484af32fca58300eb14107a36fc40c80ce1Eric Fiselierinline bool operator<(A const& L, A const& R)  { return L.data < R.data; }
2755263484af32fca58300eb14107a36fc40c80ce1Eric Fiselierint main() {
2855263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    A a;
2955263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier}
30