static-assert

    0熱度

    2回答

    如何static_assert 3項在編譯時是這樣的相同。 union { std::uint32_t multibyte; std::uint8_t bytes[4]; } test; static_assert(sizeof(test) == sizeof(test.multibyte) == sizeof(test.bytes), "Union size mism

    2熱度

    1回答

    常量參數我明白爲什麼下面的代碼不編譯很困惑: template <typename T, typename... Ts> void TEST(T&& t, Ts&&... ts) { if constexpr(sizeof...(ts) > 0) { TEST(std::forward<Ts>(ts)...); static_assert(t == 2 , "par

    1熱度

    1回答

    在我寫的構造函數模板中,我希望在類模板的接口上有一個靜態斷言。情況基本(非編譯)示例如下: class Baz { } template<typename T> class Bar: public Baz { } template<typename T> class Qux: public Baz { } class Foo { template<ty

    2熱度

    1回答

    我想做一個靜態斷言,檢查類型A是否可以添加到類型B.是否有任何方法來檢查模板類型A是否可添加到模板類型B編譯時間? A和B真的可以做任何事情。

    0熱度

    4回答

    我想使用static_assert強制失敗。如果您嘗試以特定方式實例化特定的模板化函數,我想生成編譯器錯誤。我可以讓它工作,但它真的很難看。有沒有更簡單的方法來做到這一點? 這是我第一次嘗試。這根本不起作用。即使沒有人試圖使用這個函數,它總是會產生一個錯誤。 template< class T > void marshal(std::string name, T *value) {

    8熱度

    1回答

    我有一個庫,其中包含幾個函數對象,根據std::is_integral只能接受幾種類型的函數對象。當條件失敗時,我想要std::is_invocable返回false,但是當用戶試圖調用函數對象的實例時,我也希望有一個不錯的static_assert錯誤消息。下面是函數對象的簡單例子,我現在有: struct function { template<typename Iterator>

    10熱度

    2回答

    我建立了一個幫助類,它將通過模板構造一個自定義類,這個自定義類必須繼承某個類,我可以用std::is_base_of來檢查這個。 但是我還需要檢查繼承是公共的,這怎麼能實現呢? 作爲參考,這裏是一個精簡版的類,我有std::is_base_of在那裏。 template<class CustomSink> class Sink { static_assert(std::is_base

    1熱度

    2回答

    我的問題是,下面的代碼是否有效: template<int i> class Class { static_assert(sizeof(i) == 0, "Class instantiated with i != 1"); }; template<> class Class<1> {}; 這個片段與g++編譯。但clang++被困在static_assert: error:

    6熱度

    2回答

    template<typename T> struct S {}; template<typename T> struct R {}; int main() { typedef S<double> s1; typedef S<int> s2; typedef R<int> s3; static_assert(xxx<s1, s2>::value,

    5熱度

    1回答

    考慮以下問題,它使用-std=c++14在Clang 3.8上成功編譯。 #include <boost/hana.hpp> namespace hana = boost::hana; int main() { constexpr auto indices = hana::range<unsigned, 0, 3>(); hana::for_each(indices,