From df74c873bc11ad90fb26e582c7be0ed092228661 Mon Sep 17 00:00:00 2001 From: Stoycho Kyosev Date: Fri, 25 Oct 2024 18:04:36 -0400 Subject: Add sem03 --- .../dynamic-array/examples/variadic-templates.cpp | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Seminar03/src/dynamic-array/examples/variadic-templates.cpp (limited to 'Seminar03/src/dynamic-array/examples/variadic-templates.cpp') diff --git a/Seminar03/src/dynamic-array/examples/variadic-templates.cpp b/Seminar03/src/dynamic-array/examples/variadic-templates.cpp new file mode 100644 index 0000000..291d81a --- /dev/null +++ b/Seminar03/src/dynamic-array/examples/variadic-templates.cpp @@ -0,0 +1,61 @@ +#include + +// std::forward example - preserve the value category (lvalue or rvalue) +void f(const int& x) +{ + std::cout << "lvalue" << std::endl; +} + +void f(const int&& x) +{ + std::cout << "rvalue" << std::endl; +} + +template +void g(T&& x) +{ + f(std::forward(x)); +} + +struct printer +{ + static void print() + { + std::cout << std::endl; + } + + template + static void print(const T& first, const Args&... args) + { + std::cout << first << " "; + print(std::forward(args)...); + } +}; + +struct Entity +{ + int x; + friend std::ostream& operator<<(std::ostream& os, const Entity& e); + + Entity(int x_) : x(x_) {} + + Entity(Entity&) + { + std::cout << "Copied " << x << std::endl; + } +}; + +std::ostream& operator<<(std::ostream& os, const Entity& e) +{ + os << e.x; + return os; +} + +int main() +{ + int x = 10; + g(x); + + g(std::move(x)); + +} \ No newline at end of file -- cgit v1.3.1-23-gd82d