【发布时间】:2022-01-22 06:23:27
【问题描述】:
IDE:MSVS 2022、/std:c++latest、/experimental:module、x86;
目标:导出T add(T,T),即requires std::integral<T>;
这编译(test.ixx):
export module test;
template < typename T >
concept addable = requires ( T t1, T t2 ) {
t1 + t2 ;
};
export template < typename T >
requires addable<T>
T add ( T t1, T t2 ) { return t1 + t2; }
这不是(test.ixx):
export module test;
#include <concepts>
export template < typename T >
requires std::integral<T>
T add ( T t1, T t2 ) { return t1 + t2; }
以上代码导致2个错误LNK2019,详情如下;
尝试过
-
#include <concepts>在单独的实现文件中 - 失败; -
import std.core;,似乎还不支持 - 失败;
使用示例(main.cpp):
import test;
#include <iostream>
int main ()
{
using namespace std;
int i = add(22,20); // = 42
double d = add(0.5,0.77); // = 1.27
cout << i << ", " << d << endl ; // "42, 1.27"
return 0;
}
有什么想法吗?
链接器错误详情:
LNK2019 : unresolved external symbol __imp__ldiv::<!test> referenced in function "struct test::_ldiv_t __cdecl div(long,long)" (?div@@YA?AU_ldiv_t@test@@JJ@Z::<!test>)
LNK2019 : unresolved external symbol __imp__lldiv::<!test> referenced in function "struct test::_lldiv_t __cdecl div(__int64,__int64)" (?div@@YA?AU_lldiv_t@test@@_J0@Z::<!test>)
【问题讨论】:
-
"import std.core;,似乎还不支持" 这不是 C++20 的一部分。
-
@NicolBolas 它甚至不会成为 C++23 的一部分 - 会有
stdandstd.compat
标签: c++ templates c++20 c++-concepts c++-modules