In the standard, it's a mix of things.
libc++ currently consistently implements this as a class.
I talked to the editors, and Jonathan believes that this can be fixed editorially.
I'm assuming that it will end up as a struct, and so here's a patch to implement that.
This will affect people who have specialized std::tuple_size for their own uses, and compile with -Wmismatched-tags.
It will also affect people who use libc++ with MS compilers, where the ABI is different between struct and class
I don't recommend landing this until the change goes into the standard - which will probably be a week or so.
But I was in the neighborhood, and I figured I'd write this up.