std :: визит для варианта не компилируется в клане, g 5 [duplicate]

На этот вопрос уже есть ответ:

get <string> для вариантов не работает в clang ++, но не g ++ 1 ответ

Следующее использование std :: visit правильно компилируется под gcc 7.2, но не компилируется под clang 5.0. Кто-нибудь знает в чем проблема?

#include <variant>

struct S1 {int foo() { return 0; }};
struct S2 {int foo() { return 1; }};

using V = std::variant<S1, S2>;

int  bar() {
  V v;
  return std::visit([](auto& s) { return s.foo(); }, v);
}

Первая ошибка заключается в следующем:

include/c++/7.2.0/variant:238:46: error: cannot cast 'std::variant<S1, S2>' to its private base class
  'std::__detail::__variant::_Variant_storage<true, S1, S2>'
  return __get(std::in_place_index<_Np>, std::forward<_Variant>(__v)._M_u);

Вот ссылка на Godbolt показывает эту ошибку:https: //godbolt.org/g/5iaKU

Ответы на вопрос(1)

Ваш ответ на вопрос