smartctl on external hdd inside ide-to-usb enclosure

There is a vendor independent SAT (SCSI/ATA transfer) standard, but AFAIK this is not widely supported on (cheaper) bridges.

There are several vendor specific ATA pass-through commands that you can select with smartctl with the -d option:

-d TYPE, --device=TYPE
    Specify device type to one of: ata, scsi, sat[,N][+TYPE], 
    usbcypress[,X], usbjmicron[,x][,N], usbsunplus, marvell, 
    areca,N, 3ware,N, hpt,L/M/N, megaraid,N, cciss,N, auto, test

where -d sat is for SAT compatible devices.

The USB Device Support lists devices and their commandline options, so if you get a USB controller with one of the devices listed there as supported, you have a better chance of getting things to work.

SMART over USB is generally either not possible, or is done with (bridge) vendor-specific commands, so there's no one way to get things done. smartctl knows about a few specific bridge chips. Check the manpage for a list.

This is horrible, but the only 100% reliable way to access SMART on a disk is to unplug it from the bridge and stick it on a proper host adaptor (like an on-board SATA controller or eSATA port).

With modern OS abstraction it's so easy to forget just how different these storage buses are internally.

There isn't an appropriate value of -d.

The problem is that you're using a SATA↔USB mass storage bridge, and USB mass storage doesn't have a standard way to request ATA/SATA SMART data. So instead the controller has either no way or some vendor-specific way to get the data. smartctl knows a few of these; examples include usbjmicron and usbsubplus.

So, if your USB bridge isn't one of the ones it knows about (and doesn't use exactly the same vendor-specific commands), smartctl just can't read the data.