Compiling Afner fails with gcc 4.5+

WARNING: Googlefood, thus boring…

Issue: Afner compiled fine with GCC 4.4, but when trying to compile Afner with GCC 4.5 or later, the compilation dies with:

suffixtree.h:66:14: error: class ns_suffixtree::suffixtree::node is protected
suffixtree.cpp:208:19: error: within this context
suffixtree.cpp:208:1: error: ns_suffixtree::suffixtree::node::node names the constructor, not the type

Problem: Between GCC 4.4 and 4.5, the compiler changed to support “specializing C++ constructor templates.” This caused the meaning of “class X::Y::Y” to change.

Fix: Edit src/suffixtree.cpp, and at line 208: change suffixtree::node::node * to suffixtree::node * (i.e. delete the trailing ::node.)

I would have sent it upstream, but Afner doesn’t appear to be under development any more, there’s no open repo that I can check if this is already fixed and just not released yet, and I don’t really want to take responsibility for forking the project just to fix one line. :)

Note that the general fix should work for any “X::Y::Y names the constructor, not the type” error – Drop the duplicate ::Y. Of course, your mileage will undoubtedly vary.


Leave a Reply