summary refs log tree commit diff stats
path: root/tests/cpp/tget_subsystem.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cpp/tget_subsystem.nim')
-rw-r--r--tests/cpp/tget_subsystem.nim39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/cpp/tget_subsystem.nim b/tests/cpp/tget_subsystem.nim
new file mode 100644
index 000000000..6fb095a3d
--- /dev/null
+++ b/tests/cpp/tget_subsystem.nim
@@ -0,0 +1,39 @@
+discard """
+  targets: "cpp"
+"""
+
+{.emit: """
+
+namespace System {
+  struct Input {};
+}
+
+struct SystemManager {
+  template <class T>
+  static T* getSubsystem() { return new T; }
+};
+
+""".}
+
+type Input {.importcpp: "System::Input".} = object
+proc getSubsystem*[T](): ptr T {.
+  importcpp: "SystemManager::getSubsystem<'*0>()", nodecl.}
+
+let input: ptr Input = getSubsystem[Input]()
+
+
+# bugs #4910, #6892 
+proc modify(x: var int) = 
+  x = 123
+
+proc foo() =
+  var ts: array[2, int]
+  for t in mitems(ts):
+    discard
+
+  for t in mitems(ts):
+     modify(t)
+
+  for i, t in mpairs(ts):
+    modify(t)
+