[ROOT] Can't use std::map in ROOT macros?

From: Konstantin Olchanski (olchansk@sam.triumf.ca)
Date: Fri Jul 30 2004 - 04:24:31 MEST


We are trying to use std::map in a ROOT macro and it is not working. A similar example using std::vector works fine. Is std::map supposed to work at all?

With the test script below, I get a variety of results, ranging from "Error: class,struct,union or type string,int,std not defined" to a core dump, depending on which include file I include: "map", "map.h", "_map", etc. I get similar results with root_v3.10.02 and with a (not so recent) CVS snapshot.

[olchansk@send root]$ cat map.C
#include <string>
#include <map>
#include <function>

typedef std::string sss;
typedef std::less<std::string> cmp;
//typedef std::map<sss, int, cmp> mmm;

int map()
{
  std::map<std::string, int, std::less<std::string> >  age;

  age["Fred"] = 42;                     // Fred is 42 years old
  age["Barney"] = 37;                   // Barney is 37

  cout << age["Fred"] << endl;
}

And results from running it:

[olchansk@send root]$ echo $ROOTSYS
/triumfcs/trshare/olchansk/root/root_v3.10.02_RH9
[olchansk@send root]$ $ROOTSYS/bin/root -l map.C
root [0] 
Processing map.C...
Error: class,struct,union or type string,int,std not defined  FILE:map.C LINE:13
Error: class,struct,union or type string,int,std not defined  FILE:map.C LINE:13
Error: class,struct,union or type string,int,std not defined  FILE:map.C LINE:13
Error: Symbol less<std::string> is not defined in current scope  FILE:map.C LINE:13
Error: Symbol age is not defined in current scope  FILE:map.C LINE:13
(const int)0
*** Interpreter error recovered ***

-- 
Konstantin Olchanski
Data Acquisition Systems: The Bytes Must Flow!
Email: olchansk-at-triumf-dot-ca
Snail mail: 4004 Wesbrook Mall, TRIUMF, Vancouver, B.C., V6T 2A3, Canada



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET