array[index];
                  
                  
                  }
                  
                  
                  -------------------------
                  
                  
                  Нужно ли создавать перегрузку для int индекса?
                  
                  
                  
                  
                  
                  Задача 2: 
                  
                  
                  Дано:
                  
                  
                  template<typename T>
                  
                  
                  class A {
                  
                  
                      ...
                  
                  
                  
                  
                  
                      using ConstReturnType = ?;
                  
                  
                  
                  
                  
                      ConstReturnType get(std::size_t index) const {
                  
                  
                          return _pointer[index];
                  
                  
                      }
                  
                  
                  }
                  
                  
                  -------------------------
                  
                  
                  Как получить ConstReturnType такой чтобы например для маленьких типов возвращалось значение, а для больших референсов: что-то типо такого подойдет: 
                  
                  
                  using ConstReturnType = typename std::conditional<sizeof(T) < sizeof(const T&), typename std::conditional<std::is_trivially_copyable<T>::value, T, const T&>::type, const T&>::type
                  
                  
                  ?
                  
                  
                
Подумайте о том, знаете ли вы, как будете обрабатывать отрицательные индексы, пришедшие в функцию
1. Нет, кажется, даже если на проекте приняты знаковые индексы. 2. Можно сделать conditional, но скорее бесполезно
P. S. всё-таки likeThis_ лучше _likeThis, напрягают подчеркивания префиксом
А, да, с размером ссылки бесполезно сравнивать, лучше с char*
Что касается второго вопроса — насчёт полной корректности конструкции не скажу, но должен указать на некоторые детали Во-первых, я могу заверить, что static_assert(sizeof(const T&) == sizeof(T)); и такая проверка не имеет смысла. Стоит сравнивать с sizeof(void*) Во-вторых, почему мы требуем, чтобы тип был строго меньше? Возможно, равный по размеру тип тоже подойдёт? В-третьих, стандартная библиотека вполне полагается на то, что std::string_view следует принимать по значению, а это два указателя В-четвёртых — зубодробительный код вроде typename conditional<B, T, U>::type с C++14 упрощается до conditional_t<B, T, U>. А is_trivially_copyable<T>::value с C++17 до is_trivially_copyable_v<T> уж не говоря о том, что не нужно один conditional вкладывать в другой, когда у нас есть замечательный operator&& В итоге, я бы отталкивался от чего-то такого: template<typename T> using ConstReturnType = std::conditional_t< sizeof(T) <= sizeof(void*) && std::is_trivially_copyable_v<T>, T, const T&>; Но вовсе не факт, что это вам хоть как-то поможет выиграть в производительности
Ты аргумент и возврат путаешь немного
Мог ошибиться, пока писал это полотно текста, что именно стоит исправить?
Ты говоришь что 2 потому что string_view лезет, но это же аргумент, а не возвращаемое значение
Да, немного подправил текст, пусть будет так
Ну и философский вопрос, void* или int*
Обсуждают сегодня