Глядя на стандарт C++ 11. Я вижу, что специализация std::tuple_size
и std::tuple_element
предназначены для volatile
и const volatile
кортежей.volatile и const volatile std :: tuple и std :: get
template <size_t I, class T> class tuple_element<I, volatile T>;
template <size_t I, class T> class tuple_element<I, const volatile T>;
template <class T> class tuple_size<volatile T>;
template <class T> class tuple_size<const volatile T>;
Но std::get
не делать никаких предложений специализации для volatile
или const volatile
кортежа.
Я попытался следующий код на GCC.4.8.1
volatile std::tuple<int, int> a(1, 1);
std::cout << "a<0>=" << std::get<0>(a) << "\n";
Я получаю сообщение об ошибке: no matching function for call to 'get(volatile std::tuple<int, int>&)'
Так что, если я понимаю, что я могу создать (константные) летучие кортежи, но я не могу получить доступ к их элементам ,
Является ли это ожидаемым поведением или надзором?
Большое спасибо.
Не работает на GCC 4.9, fwiw. – Barry
'const volatile' поражает меня как странную комбинацию. Кто-нибудь знает о его законном использовании? – Cameron
Регистры аппаратного обеспечения компании Cameron, которые не должны быть записаны, но могут быть изменены под вами, например. –