Como “= default” é diferente de “{}” para o construtor e o destruidor padrão?

Eu originalmente postei isso como uma questão apenas sobre destruidores, mas agora estou adicionando consideração do construtor padrão. Aqui está a pergunta original:

Se eu quiser dar a minha classe um destruidor que é virtual, mas é o mesmo que o compilador geraria, eu posso usar=default:

class Widget {
public:
   virtual ~Widget() = default;
};

Mas parece que posso obter o mesmo efeito com menos digitação usando uma definição vazia:

class Widget {
public:
   virtual ~Widget() {}
};

Existe alguma maneira em que essas duas definições se comportam de maneira diferente?

Com base nas respostas postadas para essa pergunta, a situação do construtor padrão parece semelhante. Dado que quase não há diferença de significado entre "=default"e"{}"para destruidores, há similarmente quase nenhuma diferença de significado entre essas opções para construtores padrão? Isto é, assumindo que eu quero criar um tipo onde os objetos desse tipo serão criados e destruídos, por que eu iria querer dizer

Widget() = default;

ao invés de

Widget() {}

?

Peço desculpas se estender esta questão após a postagem original violar algumas regras do SO. Postar uma pergunta quase idêntica para os construtores padrão me pareceu a opção menos desejável.

questionAnswers(3)

yourAnswerToTheQuestion