clang is correct here. The standard gives no limitation on whether literal types can or cannot have virtual members (basic.types/10.5), nor it's required for NTTP (temp.param/7.3), thus I see no reason for GCC to reject that code.