AK
decltype невозможно обойтись. Выглядит фича (если это фича...) как загнутый костыль.Size: a a a
AK
decltype невозможно обойтись. Выглядит фича (если это фича...) как загнутый костыль.DF
NL
DF
DF
DF
DF
DF
p
DS
interface ISemigroup<T>
{
T Combine(T left, T right);
}
struct IntSumSemigroup : ISemigroup<int>
{
public int Combine(int left, int right) => left + right;
}
public T ThreeTimes<T, TSemigroup>(T one) where TSemigroup: struct, ISemigroup<T> {
var witness = default(TSemigroup);
return witness.Combine(witness.Combine(one, one), one);
}
В
interface ISemigroup<T>
{
T Combine(T left, T right);
}
struct IntSumSemigroup : ISemigroup<int>
{
public int Combine(int left, int right) => left + right;
}
public T ThreeTimes<T, TSemigroup>(T one) where TSemigroup: struct, ISemigroup<T> {
var witness = default(TSemigroup);
return witness.Combine(witness.Combine(one, one), one);
}
CD
using namespace std;
template <typename T, typename T2>
decltype(auto) nth_element(T& container, T2 index) {
return container[index];
}
int main() {
vector<int> v(10,0);
nth_element(v,1) = 10;
auto x = nth_element(v,1);
for (auto &i:v) cout << i << '\n';
cout << "x == " << x << '\n';
}
decltype(auto). Казалось бы прекрасный код, но если пользователь вызовет неauto x = nth_element(v,1);
auto x = nth_element(vector<int>{1,2,3},1);DS
DS
V
V
Ct
SP
p
CD