Conflict of same function names in different modules

Summary

When different modules contains functions with the same name and function argument is defined in one of these modules, than C++ compilation is failed.

Steps and/or TTCN-3 code to reproduce

module v1 {
 // definition of argument type to enable ADL in f()
 type record T { 
   integer i
 }
 type component CT1 {
 }
 function f(T p) runs on CT1 {
 }
}
module v2 {
 import from v1 all;
 function f(T p_v) runs on CT1 {
 }
 testcase TC1() runs on CT1 {
  f({2}); // <-- Here is the problem.
 }
}

Module v2 calls f() with type of argument defined in v1. Even if function is called with module name, the final C++ code doesn't contain namespace.

What is the current bug behavior?

C++ compilation raise an error: error: call of overloaded f(v1::T&) is ambiguous

What is the expected correct behavior?

Should be compiled well.

Relevant logs and/or screenshots

build/WIN32/v2.cc: In function 'verdicttype v2::testcase_TC1(boolean, double)':
build/WIN32/v2.cc:66:2: error: call of overloaded 'f(v1::T&)' is ambiguous
   66 | f(tmp_0);
      | ~^~~~~~~
build/WIN32/v2.cc:35:6: note: candidate: 'void v2::f(const v1::T&)'
   35 | void f(const v1::T& )
      |      ^
In file included from build/WIN32/v2.hh:20,
                 from build/WIN32/v2.cc:11:
build/WIN32/v1.hh:121:13: note: candidate: 'void v1::f(const T&)'
  121 | extern void f(const T& );
      |             ^

Possible fixes

The problem arrives because of argument-dependent lookup(ADL). To avoid the problem, C++ function call should include the desired namespace: v2::f(const v1:T&)

Titan version

11

Platform details (OS type and version)

WIN and LINUX

/cc @aknappqwt @mmagyari