這是一個在C++ 03(-std = C++ 03)上工作但在GCC和VS2015上對C++ 11失敗的示例(-std = C++ 11,/ Qstd = C++ 11)即使V(U)有效,std :: pair <T, U>轉換爲std :: pair <T, V>也不起作用?
#include <utility>
class B {
public:
B(float);
};
class A {
public:
A(B);
};
std::pair<int, A> a(std::make_pair(1, 2.0));
我不知道爲什麼,這將是無效的..據我所看到的,在http://en.cppreference.com/w/cpp/utility/pair/pair描述的A
成員都是直接由初始化float
。是否有隱式可轉換性的SFINAE測試?據我所知,在cppreference上它沒有提到任何類似的東西。
我很困惑,你爲什麼期望編譯器在沒有轉換的情況下應該經歷兩次轉換? – Mehrdad
@Mehrdad如果'pair :: pair(po):f(po.f),s(po.s)',那麼沒有兩次轉換。 –
我不明白,是不是'2.0'是'雙'?它需要被轉換爲'float',在需要轉換爲'B'之前可以轉換爲'A'。這似乎需要至少2轉換,如果不是3 ... – Mehrdad