The code I posted works on C++03 (with Boost) (but, as always, it could not work on MSVC compilers, especially prior to 2008, because MSVC is just crap when it comes to template support).
And I have checked in C++0x standard (latest draft), and the rules for partial specialization will not change at all (not even for function templates!).