АК
X<std::string_view, p> y;
Size: a a a
АК
АК
VR
D
A
inplace конструируетсяVR
A
inplace конструируетсяD
VR
АК
ПК
АК
N
A
inplace конструируетсяАК
template <T value> void f();
До C++20 в качестве T мог выступать один из небольшого множества типов. Особенность этого множества состояла в том, что можно два объекта типа T
сравнить, убедиться в их эквивалентности. В частности, f<2>
и f<1+1>
оказывались одинаковыми инстанцированиями, так как 2==1+1. А ещё от них от всех можно посчитать хеш по алгоритму, выбранному компилятором.T
= std::string
(допустим также, что строка у нас уже вся обмазана constexpr). Как компилятору проверить, что f<std::string("1")>
и f<std::string("1")>
- это одна и та же функция? Логично, что для этого он должен уметь сравнивать в constexpr
строки. Более того, так как шаблоны кэшируются, то очень хорошо бы ещё уметь и хешировать такие параметры (хеш-таблица быстрее дерева). То есть при инстанцировании очередной f<some_string>
компилятор должен поискать среди уже проинстанцированных f<..>
такую же.ПК
template <T value> void f();
До C++20 в качестве T мог выступать один из небольшого множества типов. Особенность этого множества состояла в том, что можно два объекта типа T
сравнить, убедиться в их эквивалентности. В частности, f<2>
и f<1+1>
оказывались одинаковыми инстанцированиями, так как 2==1+1. А ещё от них от всех можно посчитать хеш по алгоритму, выбранному компилятором.T
= std::string
(допустим также, что строка у нас уже вся обмазана constexpr). Как компилятору проверить, что f<std::string("1")>
и f<std::string("1")>
- это одна и та же функция? Логично, что для этого он должен уметь сравнивать в constexpr
строки. Более того, так как шаблоны кэшируются, то очень хорошо бы ещё уметь и хешировать такие параметры (хеш-таблица быстрее дерева). То есть при инстанцировании очередной f<some_string>
компилятор должен поискать среди уже проинстанцированных f<..>
такую же.ПК
P
template <T value> void f();
До C++20 в качестве T мог выступать один из небольшого множества типов. Особенность этого множества состояла в том, что можно два объекта типа T
сравнить, убедиться в их эквивалентности. В частности, f<2>
и f<1+1>
оказывались одинаковыми инстанцированиями, так как 2==1+1. А ещё от них от всех можно посчитать хеш по алгоритму, выбранному компилятором.T
= std::string
(допустим также, что строка у нас уже вся обмазана constexpr). Как компилятору проверить, что f<std::string("1")>
и f<std::string("1")>
- это одна и та же функция? Логично, что для этого он должен уметь сравнивать в constexpr
строки. Более того, так как шаблоны кэшируются, то очень хорошо бы ещё уметь и хешировать такие параметры (хеш-таблица быстрее дерева). То есть при инстанцировании очередной f<some_string>
компилятор должен поискать среди уже проинстанцированных f<..>
такую же.f<1+2>
должно быть f<1+1>
АК
f<1+2>
должно быть f<1+1>
АК
const char* ptr; std::size_t cap, len;