diff options
Diffstat (limited to 'tests/cpp/tget_subsystem.nim')
-rw-r--r-- | tests/cpp/tget_subsystem.nim | 39 |
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) + |