This is an ambiguous name lookup, which in the case of multiple inheritance hides the names in the look-up. It doesn't even get to checking which overload to use.
You can fix this by adding the following to struct A
's definition:
using BASE<X,1>::get_value;
using BASE<Y,0>::get_value;
These two statements add the name get_value
from both base classes to A, and thus the compiler can then move on with its dreary life and check them as overloads.