2017-03-27 13 views
-2

私がC++ 14ようstd::is_convertible<T, X>::valueリターンのタイプTすべての可能なXためtrueすべてを変換できるタイプ?

+0

あなたは、メタ関数は常にtrueを返すようにしたいですか、またはタイプは、実際にXのための有効なオブジェクトを生成するために? – StoryTeller

答えて

0

我々はclass B {~B() = delete;}を定義することができたよう。

我々は、任意のタイプのTのために、常にそのTを変換することができないために、少なくとも1つのタイプのXが存在することを結論付けることができます。

1

あなたは確かに1を自分で作ることができます。

#include <string> 
#include <type_traits> 

struct Foo 
{ 
    template <class T> 
    operator T(); 
}; 

int main() 
{ 
    struct Bar{}; 
    static_assert(std::is_convertible<Foo, int>::value, ""); 
    static_assert(std::is_convertible<Foo, std::string>::value, ""); 
    static_assert(std::is_convertible<Foo, Bar>::value, ""); 
    return 0; 
} 
+0

私にそれを打つ。 C++ 17ではstd :: anyがありますが、より制限されています – Swift

+1

void ....... – felix

+0

すべてに変換可能! – StoryTeller

0

メタ関数は常にtrueを返すようにするために、あなたが望むすべてがある場合、あなたには、いくつかの超大型のメタ関数を記述し、いくつかのブール論理のプレースホルダを必要としているため、その後、私はちょうどテンプレートを罪と専門だろうと言います。

struct everything {}; 

namespace std { 
    template<typename X> 
    struct is_convertible<everything, X> : true_type {}; 
}; 

が、それはstd名前空間に侵入し、テンプレートを破壊しつづけ開始していないので、確かに、this answerは、はるかに良いこれを実現しています。

そうでない場合は、いいえ、そのようなタイプではありません。少なくともあなたにとって有効なオブジェクトを生成するタイプはありません。

関連する問題