Dependent Name Hunt

What does this print?

#include <iostream>
#include <string_view>

template <typename Type>
struct X {
    void bar() { std::cout << Type::identify(); }
    static std::string_view identify() { return "X"; }
};

template <typename Type>
struct Y : Type {
    void bar() { std::cout << Type::identify(); }
    static std::string_view identify() { return "Y"; }
};

class Z {
protected:
    void bar() { std::cout << identify(); }
    static std::string_view identify() { return "Z"; }
};

int main() { Y<Z>{}.bar(); }
A

Compile error: Z::bar() is protected

B

Y

C

X

D

Z