Ошибка реализации std::variant (Clang 4.0.1)

Вот мой основной тестовый код:

#include <iostream>
#include <variant>

int main(int argc, char** argv) {
    std::variant<int> v{5};
    std::cout << std::get<0>(v) << std::endl;
}

Когда я компилирую его с помощью Clang следующим образом: clang++ -std=c++1z -g Sources/main.cpp я получаю следующие ошибки:

In file included from Sources/main.cpp:2:
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/variant:235:46: error: cannot cast 'std::variant<int>' to its private base class
      'std::__detail::__variant::_Variant_storage<true, int>'
      return __get(std::in_place_index<_Np>, std::forward<_Variant>(__v)._M_u);
                                             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/variant:1192:35: note: in instantiation of function template specialization
      'std::__detail::__variant::__get<0, std::variant<int> &>' requested here
      return __detail::__variant::__get<_Np>(__v);
                                  ^
Sources/main.cpp:6:20: note: in instantiation of function template specialization 'std::get<0, int>' requested here
        std::cout << std::get<0>(v) << std::endl;
                          ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/variant:878:7: note: constrained by private inheritance here
    : private __detail::__variant::_Variant_base<_Types...>,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/variant:235:74: error: '_M_u' is a private member of
      'std::__detail::__variant::_Variant_storage<true, int>'
      return __get(std::in_place_index<_Np>, std::forward<_Variant>(__v)._M_u);
                                                                         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/variant:878:7: note: constrained by private inheritance here
    : private __detail::__variant::_Variant_base<_Types...>,
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/variant:377:34: note: member is declared here
      _Variadic_union<_Types...> _M_u;

Но когда я компилирую с помощью GCC с теми же параметрами, у меня нет ошибок, и я получаю правильный результат (5).

Поэтому я хотел бы знать, действительно ли это ошибка реализации или она исходит от меня.


person Ardakaniz    schedule 28.08.2017    source источник
comment
В чем вопрос ? здесь нет раздела отчетов об ошибках clang.   -  person Jarod42    schedule 28.08.2017
comment
Пожалуйста, укажите все ошибки в вопросе.   -  person Barry    schedule 28.08.2017
comment
Переключитесь на libc++ - clang++ -std=c++1z -stdlib=libc++.   -  person Holt    schedule 28.08.2017
comment
Вопрос отредактирован. У меня нет libc++, поэтому мне придется установить его.   -  person Ardakaniz    schedule 28.08.2017
comment
@Ardakaniz См. stackoverflow.com/questions/44584289/ для получения дополнительной информации,   -  person Holt    schedule 28.08.2017
comment
Да, все в порядке, теперь все работает, ти!   -  person Ardakaniz    schedule 28.08.2017