I had some code files that compiled fine either using a Makefile or using .L foo.C+, but then I tried moving a function from one of the top-level files into another file inside a namespace, and now I get this compilation error:
root [10] .L Utility.C+
Info in <ACLiC>: modified script has already been compiled and loaded
Info in <ACLiC>: it will be regenerated and reloaded!
Info in <TMacOSXSystem::ACLiC>: creating shared library /Users/jfcaron/Projects/Proto2BeamTest2/./Utility_C.so
In file included from /Users/jfcaron/Projects/Proto2BeamTest2/Utility_C_ACLiC_dict.cxx:17:
In file included from /Users/jfcaron/Projects/Proto2BeamTest2/Utility_C_ACLiC_dict.h:34:
/Users/jfcaron/Projects/Proto2BeamTest2/./Utility.C:295:23: error: too few template
arguments for class template 'set'
static const std::set<int> positives{14,15,16,17,66,67,90,91,117,118,
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/__tree:36:33: note:
template is declared here
class _LIBCPP_TYPE_VIS_ONLY set;
^
The rest of the file Utility.C can be found here: http://www.phas.ubc.ca/~jfcaron/Tracking/Utility.C with the function at the bottom.
The exact same function when placed in a bigger code file (but in global scope there, not in a namespace) compiles just fine. It also compiles on ideone here: http://ideone.com/WJrLny. What could be causing the problem? The error message seems completely meaningless to me. A class in Utility.C does use the ClassDef macro, could the macro be leaking out somehow and messing up my set?
Note: you need C++11 support to compile the code, since it uses initializer_list-construction for the set, auto and range-based for loops.
Jean-François