Richard Stevensの詳解UNXIプログラミングで
勉強しています。サンプルコードをコンパイル
しているなかでエラーが出たのですが教えて下さい。

apue/signals/setops.cのなかで

int
sigaddset(sigset_t *set, int signo)
{
    if (SIGBAD(signo)) { errno = EINVAL; return(-1); }

    *set |= 1 << (signo - 1);/* turn bit on */
    return(0);
}
という個所があるのですが、この関数内における
  *set |= 1 << (signo - 1);
という行においてエラーが出ます。gcc-2.95.4における
エラーメッセージは以下の通りです。
setops.c: In function `sigaddset':
setops.c:12: invalid operands to binary |

これはどういう意味なのでしょうか?

使っているLinuxの/usr/include/asm/signal.hにはsigset_tは
#define _NSIG64
#define _NSIG_BPW32
#define _NSIG_WORDS(_NSIG / _NSIG_BPW)
typedef struct {
    unsigned long sig[_NSIG_WORDS]; 
} sigset_t;
このように定義してあります。

gccのコンパイラオプションで回避できるものなのでしょうか?
使っているマシン(i386)でsizeof(unsigned long)を確かめたところ
4バイトでした。