下記のコードを考えたとき、hogeを継承したhoge2からhogeのpublic member functionを呼び出せるはずですが、hoge2でhoge_function()を定義して、hoge_function(bool)を呼び出そうとするとvisual studioではC2660、clangではtoo many argumentsのエラーが出てしまいます。

なぜこのような挙動をするのでしょうか?

参考ですが、hoge2のhoge_function(bool)を削除すれば、エラーがなくなります。

追記:
コメントを参考に以下のように質問のコードを修正しました。

#include<iostream>
#include<memory>
class hoge
{
public:

    virtual void hoge_function()
    {
        std::cout << "hoge" << std::endl;
    }

    //virtual void hoge_function(bool hoge = true)
    virtual void hoge_function(bool hoge)
    {
        std::cout << "hogehoge" << std::endl;
    }
};

class hoge2 : public hoge
{
public:
    //virtual void hoge_function()
    virtual void hoge_function(bool hoge)
    {
        std::cout << "hoge2" << std::endl;
    }
};

int main()
{
    std::shared_ptr<hoge2> hogehoge = std::make_shared<hoge2>();

    // this line returns an error
    hogehoge->hoge_function(true);

    return 0;
}