I had similar problems some time ago. My guess is, that this is some form of a compiler bug. You could probably compile with --keep and dig through the created files and check what is missing.
I haven’t look that deep into the problem, as macro with some if statements was ok for me. You could also try some form of template meta-programming list, but I ran into some problems with compiling it.
BTW: The problem is in CUDA 3.0 beta as well.
Edit: You can also remove all constructors from your classes, but this is probably not what you are looking for.