KeyValuePair< K, V> структура и следовательно не может быть пустой ни при каких обстоятельствах. Только ссылочный тип может быть пустым.
, При попытке поймать неправильное значение, необходимо будет проверить участников Ключа и Значения индивидуально.
Проблема в том, что в производном классе вы скрываете защищенный метод в базовом классе. Вы можете сделать несколько вещей: либо вы полностью квалифицируете защищенный метод в производном объекте, либо вы добавите этот метод в область видимости с помощью директивы using:
class B : public A
{
protected:
using A::some_func; // bring A::some_func overloads into B
public:
virtual ~B() {}
virtual void some_func(const unsigned int& param1, const char*)
{
A::some_func(param1); // or fully qualify the call
}
};