【发布时间】:2009-05-12 22:22:43
【问题描述】:
我正在编写一个智能 ptr 模板,该模板仅针对给定的基类及其子类进行实例化,它提供了类似于 boost::shared_ptr 的隐式转换到模板 MyPtr<U> 的变体 MyPtr<T> 很长因为从 T* 到 U* 的转换是有效的(有效的基类和 const 兼容)。
这在 vs2005 中运行良好,但不适用于 g++ 在 linux 上,所以我的同事在那里更改了它,但这样做破坏了 const 正确性。
我的问题是我想对某些转换无效(例如将MyPtr<const T> 分配给MyPtr<T>)进行单元测试,导致文件无法编译!但是您不能在解决方案中没有未编译的文件...
如果有一些特定于 VS 的 #pragma 或一些可以测试给定构造的 SFINAE 技巧NOT有效,因此无法编译?
谢谢,--DD
【问题讨论】:
-
你能发布一些损坏的代码吗?
-
你可以查看我问过的关于单元测试编译时错误的这个问题:stackoverflow.com/questions/605915/unit-test-compile-time-error
-
感谢卢克的链接。这确实与我的问题具有相同的精神。但答案也让我想要更好的东西。我有一种感觉,如果不打算编译的代码被包装在模板中,那么 SFINAE 可能会有所帮助,该模板稍后用于函数重载解决方案。在此代码中允许不为一个重载候选者编译,而是选择默认情况重载,并且在运行时可检测到。当我有时间时,我会尝试这些方面的东西。
标签: c++ visual-studio templates