次のプログラムはC++ 11対応ですか?もしそうなら、それを引き起こす特定のMSVCバグについて知っていますか?および/または可能な回避策?オーバーロードされたテンプレート関数のMSVC2015 decltypeパラメータタイプ
#include <iostream>
struct A {};
struct B {};
constexpr A aaa = {};
constexpr B bbb = {};
template <typename T>
void foo(T, decltype(aaa)) { std::cout << "a"; }
template <typename T>
void foo(T, decltype(bbb)) { std::cout << "b"; }
//^C2995 'void foo(T,unknown-type)': function template has already been defined
int main()
{
foo(0, aaa);
foo(0, bbb);
}
実際の型はdecltype
に代入されている場合、それは動作しますが、実際にはこれらの型が再現すると、私は彼らのために別名を持つことが希望されない、あまりにも複雑です。
コンパイルをgcc/clangでうまくいけば、C++ 11に準拠していないものも見えません。 – Jarod42