-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Closed
Description
This code:
type Vector* {.importcpp: "std::vector", header: "<vector>", nodecl.} [T] = object
proc mkVector*[T]: Vector[T] {.importcpp: "std::vector<'*0>()", header: "<vector>", constructor, nodecl.}
proc foo(): Vector[cint] =
mkVector[cint]()
proc bar(): Vector[cstring] =
mkVector[cstring](), when compiled with
nim cpp codegen_bug.nim, produces incorrect return type in the generated C++ code (both functions are declared to return vector<int>):
typedef std::vector<int> TY_lsra5sU08ga9bO3llT5YRoA;
/* irrelevant code here */
N_LIB_PRIVATE N_NIMCALL(TY_lsra5sU08ga9bO3llT5YRoA, foo_mtEaLGWplUQxutU9alIWbUw)(void) {
TY_lsra5sU08ga9bO3llT5YRoA result;
nimfr_("foo", "codegen_bug.nim");
nimln_(5, "codegen_bug.nim");
result = std::vector<int>();
popFrame();
return result;
}
N_LIB_PRIVATE N_NIMCALL(TY_lsra5sU08ga9bO3llT5YRoA, bar_mtEaLGWplUQxutU9alIWbUw_2)(void) {
TY_lsra5sU08ga9bO3llT5YRoA result;
nimfr_("bar", "codegen_bug.nim");
nimln_(8, "codegen_bug.nim");
result = std::vector<NCSTRING>();
popFrame();
return result;
}, resulting in this error:
/home/dmitry/work/tmp/nimcache/codegen_bug.cpp: In function ‘TY_lsra5sU08ga9bO3llT5YRoA bar_mtEaLGWplUQxutU9alIWbUw_2()’:
/home/dmitry/work/tmp/nimcache/codegen_bug.cpp:78:33: error: no match for ‘operator=’ (operand types are ‘TY_lsra5sU08ga9bO3llT5YRoA {aka std::vector<int>}’ and ‘std::vector<char*>’)
result = std::vector<NCSTRING>();
Nim version: devel (5d13e3f)