开发平台(Platform): (Ex: Win10, Linux, ...)
http://rextester.com/l/cpp_online_compiler_gcc
在这地方测试的
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
gcc
问题(Question):
http://codepad.org/3WjlxLGF
f((string)FOO<int,int>());
上面这行编译不过
但只用隐式转型时没问题
强制转基本型别也可以(但要稍微改一下code)
如果casting operator不以template方式使用,例如指定string型别
则允许强制转型成string
想请教有人知道原因吗
作者:
CoNsTaR ((const *))
2017-10-30 18:30:00你这样子是在建构 FOO<int,int>,不是在呼叫 operator U欸还是现在 c++17 又有什么神奇的新规定了吗喔喔… 是我脑残了 XDD
我的原始目的是模拟偏特化函数模板,想尝试看看functor以外的方法costructor缺点是无法回传,所以想了一个转型的解法至于17,是有一个ctor参数推导模板参数的新规定,类似函数那样
作者:
CoNsTaR ((const *))
2017-10-30 19:18:00template <typename T> T foo = (T)FOO<int,int>().operator T(); f(foo<string>);这样编译可以过欸,完全不知道原因…感觉是编译器的型别推论有问题?不过不只 gcc,clang 也这样真的满奇怪的
作者:
notBeing (read and be read)
2017-10-30 19:27:00因为 explicit conversion 要生成 temporary of stringtype请参照 C++ 03 standard 中5.4 explicit type conversion
作者:
CoNsTaR ((const *))
2017-10-30 20:34:00楼上是想讲 4.1.2 ?不过这和原 Po 的问题有什么关系吗
作者:
PkmX (阿猫)
2017-11-03 20:28:00对 因为static_cast是做direct-initializationC++17 多了 guaranteed copy elision 刚好可以处理这个case
回到上面的原始目的,用ctor加转换函数的作法,在过程遇到太多问题了,还是乖乖回去用functor好