次のコードは、gccまたはclangでコンパイルできません。
template<class T>
class foo{};
template<class T>
class template_class_with_struct
{
void my_method() {
if(this->b.foo < 1);
};
struct bar
{
long foo;
} b;
};
エラーメッセージは
error: type/value mismatch at argument 1 in template parameter list for 'template<class T> class foo'
8 | if(this->b.foo < 1);
エラーはtemplatクラスfooが原因で発生します。<1の代わりに<=を書き込むと、コンパイルも行われます。
ヒントはありますか?
CompilerExplorerリンクhttps://godbolt.org/z/v6Tygo
b.bar::foo
または括弧((this->b.foo) < 1
)