Это даже не сработает, так как нет неявного преобразования или неявного конструктора для shared_ptr из SomeType *.
Вы должны позвонить
boost::bind(&SomeFun, boost::shared_ptr<SomeType>(somePtr))
если somePtr - указатель, который вы только что присвоили "new", и ожидаете, что он будет удален позже, когда последняя ссылка shared_ptr выйдет из области видимости. Если вы не хотите, чтобы указатель был удален, но вы знаете, что он все еще будет действителен во время вызова, и функция должна принимать shared_ptr, вы можете использовать no-op delete для создания shared_ptr. В любом случае, это - shared_ptr, а не указатель, слабый_птр или что-то еще, что вы должны передать в этом случае.
Вы говорите, что ваш случай отличается, поэтому нам нужно увидеть ваш фактический случай или тот, который соответствует ему.
Возможно, вас смущает случай, когда передаваемая вами функция является функцией-членом класса, а вы передаете экземпляр класса (объект) в качестве одного из параметров. Здесь вы можете передать указатель, ссылку или shared_ptr, и это может быть константная ссылка, если функция является const-методом (аналогично указателю на const или shared_ptr на const).
Это просто потому, что существуют разные перегрузки для boost :: bind для всех этих случаев, когда функция является функцией-членом класса.
Если преобразование неявное, то неявное преобразование произойдет во время вызова функции. boost :: bind - это просто шаблон, в котором хранится то, что передается в него.
Некоторая магия произойдет с первым параметром, если он используется для вызова функции-члена.
Обратите внимание, что иногда boost :: bind будет хранить boost :: ref, где функция на самом деле берет ссылку.