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// <map>
1155263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier
1216e2ba19dfffdcf9bba202eb8a27fd79e3d15303Stephan T. Lavavej// Check that std::map and its iterators can be instantiated with an incomplete
1355263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier// type.
1455263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier
1555263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier#include <map>
1655263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier
1755263484af32fca58300eb14107a36fc40c80ce1Eric Fiselierstruct A {
1855263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    typedef std::map<A, A> Map;
1955263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    int data;
2055263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    Map m;
2155263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    Map::iterator it;
2255263484af32fca58300eb14107a36fc40c80ce1Eric Fiselier    Map::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