¿La definición de la función C ++ y la declaración de variables no coinciden?

Considere este código muy simple:

#include <memory>

class Foo
{
public:
    Foo() {};
};

class Bar
{
public:
    Bar( const std::shared_ptr<Foo>& foo ) {}
}; 

int main()
{
    Foo* foo = new Foo;
    Bar bar( std::shared_ptr<Foo>( foo ) );
    return 0;
}

¿Por qué los informes de Visual Studio

warning C4930: 'Bar bar(std::shared_ptr<Foo>)': prototyped function not called (was a variable definition intended?)

y no haybar objeto creado ... ¿cómo puede esta líneaBar bar( std::shared_ptr<Foo>( foo ) ); ser interpretado como una definición de función?

lo comprobé¿Los paréntesis después del nombre del tipo hacen una diferencia con new? y tambiénC ++: advertencia: C4930: función prototipada no llamada (¿se pretendía una definición variable?), pero siento que mi problema es diferente aquí, ya que no utilicé la sintaxisFoo() niBar().

Editar: Tenga en cuenta que compila correctamente:

Foo* foo = new Foo;
std::shared_ptr<Foo> fooPtr( foo );
Bar bar( fooPtr );

Respuestas a la pregunta(1)

Su respuesta a la pregunta