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.
References:
- Afner: http://afner.sourceforge.net/
- GCC Change: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9050
Leave a Reply