АК
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;