9
問題は、異なるコンパイラが異なる出力(clang/gcc)を生成するので、この使用法が未定義の動作であると考えることができます。しかし私の目標は、参照を割り当てる際にconst
を推測することです。演算子からconstを引くT&()
出力で:
打ち鳴らす - 3.6 - >not const
のgcc-4.8.4 - >const
#include <iostream>
#include <type_traits>
struct AnyReference {
template <typename RT> AnyReference(RT &a_var) : _ptr(&a_var) {}
template <typename T> operator T &() const
{
if (std::is_const<T>::value) {
std::cout << "const\n";
}
else {
std::cout << "not const\n";
}
return *reinterpret_cast<T *>(_ptr);
}
void *_ptr;
};
int main()
{
int i(5);
AnyReference a(i);
const int &c = a;
}
私はあなたが読んで聞かせて次の投稿:http://stackoverflow.com/questions/32515183/const-auto-stdinitializer-list-difference-between-clang-and-gcc –
「オペラT& 'と'演算子const T& '? –
@Ben Voigtいいえ私はしませんでしたが、それは素晴らしい解決策です!それは期待どおりに動作します。 –