As per ERC20 specification transfer returns bool:
function transfer(address _to, uint256 _value) returns (bool success);
I would prefer my token contract transfer() to revert on failure and return true on success. This way I would not have to worry that any of my contracts relying on my ERC20 is properly doing require(myToken.transfer(...))
Would this cause any issue for 3rd party contracts / applications ? Is there any which relies on a transfer which fails but they still want to perform something?
An alternative would be to create an additional safeTransfer function which calls transfer internally with require but it convolutes the tokenContract.