Resultados diferentes em Clang e GCC ao converter para std :: optional <T>

Dado o seguinte código:

#include <iostream>
#include <optional>

struct foo
{
    explicit operator std::optional<int>() {
        return std::optional<int>( 1 );
    }
    explicit operator int() {
        return 0;
    }
};

int main()
{
    foo my_foo;
    std::optional<int> my_opt( my_foo );
    std::cout << "value: " << my_opt.value() << std::endl;
}

gravações do gcc 7.2.0 value: 1.

MSVC 201,7 (15.3) eclang 4.0.0 no entanto escrever value: 0.

Qual está correto de acordo com o padrão C ++?

questionAnswers(1)

yourAnswerToTheQuestion