小编Pau*_*ulo的帖子

为什么 static_assert 会破坏替换?

请考虑以下 C++14 代码:

#include <type_traits>

template<typename T>
class Bar {
    static_assert(std::is_destructible<T>::value, "T must be destructible");
};

template<typename T>
void foo(Bar<T> const &) {}

template<typename T>
void foo(T const &) {}

class Product {
public:
    static Product *createProduct() { return new Product{}; }
    static void destroyProduct(Product *product) { delete product; }
private:
    Product() = default;
    ~Product() = default;
};

int main()
{
    Product* p = Product::createProduct();
   
    foo(*p);            // call 1: works fine
    foo<Product>(*p);   // call 2: fails to compile
       
    Product::destroyProduct(p);
           
    return …
Run Code Online (Sandbox Code Playgroud)

c++ static-assert sfinae

3
推荐指数
1
解决办法
105
查看次数

标签 统计

c++ ×1

sfinae ×1

static-assert ×1