RyanJK5
4 hours ago
Try it on Compiler Explorer: https://godbolt.org/z/91dj5jeGW
Check out the source code: https://github.com/RyanJK5/rjk-duck
gmueckl
16 minutes ago
An include with a HTTP URL is a scary abomination straight put of hell. Please tell me that this is a compiler explorer specialty (which would still be cursed, but in a cool way) and not a GCC feature (which would be an absolute nightmare).
schaefer
2 hours ago
in the first example:
```
10: rjk::duck<Container> c{std::vector<int>{1, 2, 3}};
11: c.size(); // 3
12:
13: c = std::string{"hello"};
```
Does the assignment on line 13 call the destrucor for the vector of ints created on line 10?
RyanJK5
2 hours ago
Yes. duck takes ownership of the vector by moving it into its internal storage.
As a bonus, if you tried passing in an lvalue, it will reject the input unless you add the "copyable" trait, so it ends up mitigating some hidden copies.
rycomb
35 minutes ago
Is there another option? Or were you asking if it leaks memory?
Maybe you were asking if it implements custom destructors? GC?
schaefer
20 minutes ago
> Or were you asking if it leaks memory?
yeah,
If variable c where of type void* instead of duck<Container>, the assignment on line 13 would leak the memory used by the vector<int>.