// { dg-do run  }
// { dg-options "-O1" }
// Origin: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>

#include <map>
#include <cstdlib>
#include <cstring>

using namespace std;

class NAMES_ITEM
    {
public:
    char *name;

      NAMES_ITEM(const NAMES_ITEM& item2);

      NAMES_ITEM(const char* name2);

      ~NAMES_ITEM();

      bool operator==(const NAMES_ITEM& n) const;
    };


NAMES_ITEM::NAMES_ITEM (const NAMES_ITEM& item2)
        {
        size_t length=std::strlen(item2.name);

        name=new char[length+1];
        std::memcpy(name,item2.name,length+1);
        }

NAMES_ITEM::NAMES_ITEM (const char* name2)      
        {
        size_t length=std::strlen(name2);

        name=new char[length+1];
        std::memcpy(name,name2,length+1);
        }

NAMES_ITEM::~NAMES_ITEM ()
{
  if (std::strcmp (name, "one") != 0)
    abort ();
  
  name=0;
}

bool NAMES_ITEM::operator==(const NAMES_ITEM& n) const
{
  return (std::strcmp(name,n.name) == 0);
}

bool operator<(const NAMES_ITEM& n1, const NAMES_ITEM& n2)
    {
    return (std::strcmp(n1.name,n2.name) < 0);
    }

    typedef map<NAMES_ITEM,size_t,less<NAMES_ITEM> > lookup_t;

    lookup_t lookup;

	NAMES_ITEM item ("one");

int
main()
  {
        lookup.insert(pair<NAMES_ITEM,size_t>(item,0));
	return 0;
  }
